"未定义常量"提示,但常量应该被定义。

3

有三个文件:common.php、controller.php和user.php。

文件common.php如下:

<?php
define("MAXIMUM_NAME_LENGTH", 50);
?>

文件controller.php看起来像:

<?php
include("common.php");
include("user.php");
$user = new user();
?>

文件 user.php 如下:

<?php
class user{
private $var = MAXIMUM_NAME_LENGTH;
}
?>

当执行脚本时,会出现提示:警告:在 /.../controller.php 的 xxx 行中,使用了未定义的常量 MAXIMUM_NAME_LENGTH - 假定为 'MAXIMUM_NAME_LENGTH'。我希望在其他文件之间共享 common.php 中定义的值。如何以正确的方式实现?


你的 user.php 文件是否对 MAXIMUM_NAME_LENGTH 变量做了任何修改? - gion_13
1
将您的 include 更改为 require,以确保您的文件被正确地包含。使用 PHP 5.2 进行快速测试可以确认此精确代码应该可以工作。 - Marek Karbarz
尝试将 include 替换为 require - 也许文件没有被包含(路径错误)。 - OZ_
2个回答

1
通常情况下,您需要将所有定义包含在将使用它们的文件中。例如,在您的示例中,让类文件具有$class->setMaxNameLength();方法,并通过该方法传递名称长度定义,这样就不会出现错误。

不,PHP规范说明包含的文件可以使用已经定义的任何常量。 - Kelly
然而,如果在层次结构中重复包含一个文件(例如:如果我从5.3.7rc1的index.php中包含test1.php和test2.php),则无法让test1.php中定义的变量在test2.php中工作。 - cbroughton
我没有看到那种行为。 - Marek Karbarz
奇怪,可能是由于我的服务器/ suhosin / php.ini 配置选项的特定组合。 :/ - cbroughton

1
include("common.php");之前的行放置error_reporting(E_ALL);
很可能你会看到类似以下内容:
Warning: include(common.php) [function.include]: failed to open stream: No such file or directory in xxx

这表示你的三个文件不在同一个文件夹中,或者它们在不在你的include_path路径下,或者两者都有可能。

编辑:

如果你正在使用Suhosin,请检查你的suhosin.executor.include.*设置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接