我在类中使用静态变量并访问它时遇到了一个有趣的问题。在这个例子中,我正在使用PSR-4加载。
在我的文件顶部,我有通常的
use Networks\ConfigHandlers\ServicesConfig
接着是
class Authenticate{
...
function __construct(){
$this->fullTokenExpireTimeExtend = ServicesConfig::$timeUnits['halfday'];
$this->standardTokenExpireTimeExtend= ServicesConfig::$timeUnits['twoday'];
$this->simpleTokenExpireTimeExtend = ServicesConfig::$timeUnits['week'];
}
...
}
在开发中这段代码执行正常而没有问题。然而,在生产中它会抛出一个错误:
PHP致命错误:类'Networks \\ ConfigHandlers \\ ServicesConfig'没有 在第151行的/var/www/html/public/v1/Authenticate.php中找到
第151行包含:
$this->fullTokenExpireTimeExtend = ServicesConfig::$timeUnits['halfday'];
从上面。
ServicesConfig.php看起来像这样(编辑到有问题的部分):
<? namespace Networks\ConfigHandlers;
/**
* Configuration.
* @package xxxxx
* @author xxxxx
* @category Config
* @copyright (c) 2013-2016, xxxxx
*/
class ServicesConfig{
/**
* The time units in seconds
* @var array
*/
public static $timeUnits = array(
'second' => 1,
'quarterminute' => 15,
'halfminute' => 30,
'minute' => 60,
'fiveminutes' => 300, // 60*5 Seconds
'tenminutes' => 600, // 60*5*2 Seconds
'quarterhour' => 900, // 60*5*3 Seconds
'halfhour' => 1800, // 60*30 Seconds
'hour' => 3600, // 60*60 seconds
'halfday' => 43200, // 60*60*12 seconds
'day' => 86400, // 60*60*24 seconds
'twoday' => 172800, // 60*60*24*2 seconds
'week' => 604800, // 60*60*24*7 seconds
'month' => 2592000, // 60*60*24*30 seconds
'year' => 31536000 // 60*60*24*365 seconds
);
}
我无法弄清楚为什么这将在生产中发生,但在开发中完美无缺。本地我在Mac上运行PHP 5.5,在CentOS上运行5.5,所以我不相信它因版本而出现语法错误,当然我可能是错的。
我检查过以确保文件在目录中,交叉检查名称,并且它应该是全部。我还检查了类图,以确保它已注册,确实如此。
我的一个理论是,在调用ServicesConfig之前,必须首先在__construct()中实例化ServicesConfig ......但如果是这种情况,那么dev中的情况是否会成立?还没有尝试过,因为我的理解在这方面有点不稳定,宁愿得到一个具体的答案来完全理解什么和为什么。
对结果变化的任何解释?我很难过。
答案 0 :(得分:1)
解决方案:问题不在名称空间中,而是使用php <?
短标记而不是完整的<?PHP
标记造成的。
感谢额外的一双眼睛。