8

假设我定义了一个这样的变量:

<?php
define("page", "actual-page");
?>

现在我必须将此内容从更改actual-pagesecond-page我怎么能意识到这一点?

我尝试以下方法:

<?php
// method 1
    page = "second-page";

// method 2
    define("page", "second-page");

// method 3
    unset(page);
    define("page", "second-page");
?>

现在我的想法消失了……我还能做什么?

4

4 回答 4

21

当您使用 PHP 的 define() 函数时,您不是在定义一个变量,而是在定义一个常量。一旦脚本开始执行,常量就不能修改它们的值。

于 2013-05-11T12:35:01.460 回答
6

您可以使用 runkit PECL 扩展:

runkit_constant_remove('page');

http://php.net/runkit_constant_remove
http://github.com/zenovich/runkit

sudo pecl install https://github.com/downloads/zenovich/runkit/runkit-1.0.3.tgz

更新:这个模块似乎会给其他各种事情带来麻烦,例如会话系统。

于 2014-07-22T12:20:12.143 回答
4

也许是一个很晚的答案,但问题是“现在我的想法消失了......我还能做什么?”

以下是您可以执行的“其他”操作 - 使用 $GLOBALS:

<?php
// method 1
    $GLOBALS['page'] = 'first-page';

// method 2
    $GLOBALS['page'] = "second-page";

// method 3
    $GLOBALS['page'] = 'third-page';
?>

我希望它有所帮助。我在进行导入时使用它,如果导入标志打开,我希望不触发特定事件:)

于 2018-07-06T09:01:29.547 回答
-11

define有第三个参数(布尔值),它将第一个定义的常量覆盖到第二个定义的常量。将第一个定义的常量设置为true

<?php
define("page", "actual-page", true);
// Returns page = actual-page

define("page", "second-page");
// Returns page = second-page
?>
于 2016-08-12T10:53:21.727 回答