2011-05-11 27 views
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; 
} 
?> 

當執行腳本有會發出通知:注意:使用未定義的常量MAXIMUM_NAME_LENGTH - 在/.../controlle中假定爲「MAXIMUM_NAME_LENGTH」在xxx行上的r.php。我想在common.php中共享其他文件中定義的值。如何以適當的方式做到這一點?

+5

這應該有工作 – Neal

+0

是你'user.php'文件改變以任何方式'MAXIMUM_NAME_LENGTH'變種? –

+1

將您的'include'改爲'require'以確保您的文件實際上包含正確。 PHP 5.2的快速測試證實了這個確切的代碼應該可以工作。 –

回答

1

一般來說,你將不得不通過將使用這些文件包括了所有定義。 IE:在你的例子中,使類文件有一個$class->setMaxNameLength();方法,並通過那裏傳遞名稱長度定義,這樣它不會給你一個錯誤。

+0

不,PHP規範聲明包含的文件可以使用任何已定義的常量。 – Kelly

+0

然而一個包含文件兩次環比下滑(IE:如果我有test1.php和test2.php從index.php文件在5.3.7rc1,它不會讓在test2.php test1.php工作定義的變量。 – cbroughton

+0

我沒有看到這種行爲 –

1

廣場error_reporting(E_ALL);include("common.php");前行。

最可能的是,你會看到類似:

Warning: include(common.php) [function.include]: failed to open stream: No such file or directory in xxx 

說明你的三個文件是不是在同一個文件夾,或一起,是不是在你的include_path路徑,或者是某個組合。

編輯:

如果使用Suhosin,請檢查您suhosin.executor.include.*設置。