У меня возникла интересная проблема с использованием статических переменных в классах и их доступа. В этом примере я использую загрузку PSR-4.Класс PHP, область видимости и статическая переменная Требуется уточнение
В верхней части моего файла у меня есть обычный
use Networks\ConfigHandlers\ServicesConfig
следует
class Authenticate{
...
function __construct(){
$this->fullTokenExpireTimeExtend = ServicesConfig::$timeUnits['halfday'];
$this->standardTokenExpireTimeExtend= ServicesConfig::$timeUnits['twoday'];
$this->simpleTokenExpireTimeExtend = ServicesConfig::$timeUnits['week'];
}
...
}
В разработчике этот код отлично без проблем. В производстве, однако он выдает ошибку:
PHP Fatal error: Class 'Networks\\ConfigHandlers\\ServicesConfig' not found in /var/www/html/public/v1/Authenticate.php on line 151
линии 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
);
}
То, что я не могу понять, почему это будет происходить в производстве пока работает безотказно в разработчика. Локально я запускаю PHP 5.5 на Mac и в производстве 5.5 на CentOS, поэтому я не считаю его синтаксической ошибкой из-за версии, я мог ошибаться, конечно.
Я проверил, чтобы файл находился в каталоге, перекрестно проверял имена, и все так, как должно быть. Я также проверил classmap, чтобы убедиться, что он зарегистрирован, и это так.
Одна из теорий, которые у меня есть, заключается в том, что ServicesConfig должен быть создан первым в __construct() перед вызовом ServiceConfig ... Но если бы это было так, не было бы то же самое верно в dev? Я еще не пробовал это, так как Мое понимание немного шаткое в этой области и скорее получит конкретный ответ, чтобы полностью понять, что и почему.
Любые объяснения по этому изменению результатов? Я в тупике.
Не используйте короткие теги. всегда используйте ' php' not' '. т. е. изменить ' namespace' в ' php namespace'. Вы можете использовать короткие теги эха (' =') В «шаблонах». –
проверьте файл php ini. Я подозреваю, что они инвалиды на производстве. –