Необходимы класс PHP, область видимости и уточнение статических переменных

Я столкнулся с интересной проблемой использования статических переменных в классах и доступа к ним. В этом примере я использую загрузку 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'];

    }

...
}

В dev этот код выполняется без проблем. В производстве, однако, он выдает ошибку:

Неустранимая ошибка PHP: класс 'Networks\\ConfigHandlers\\ServicesConfig' не найден в /var/www/html/public/v1/Authenticate.php в строке 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
    );

}

Чего я не могу понять, так это того, почему это происходит на производстве, но в dev работает без нареканий. Локально я запускаю PHP 5.5 на Mac и в производственной версии 5.5 на CentOS, так что я не верю, что это синтаксическая ошибка из-за версии, я, конечно, могу ошибаться.

Я проверил, чтобы убедиться, что файл находится в каталоге, перепроверил имена, и все это так, как должно быть. Я также проверил карту классов, чтобы убедиться, что она зарегистрирована, и это так.

Одна из теорий, которые у меня есть, заключается в том, что сначала необходимо создать экземпляр ServicesConfig в __construct(), прежде чем вызывать ServicesConfig... Но если бы это было так, разве бы это не было так в dev? Я еще не пробовал, поскольку мое понимание немного шатко в этой области, и я хотел бы получить конкретный ответ, чтобы полностью понять, что и почему.

Любые объяснения этого изменения в результате? Я в тупике.

1 ответ

@ Райан Винсент был абсолютно прав и поймал эту маленькую деталь. Я должен был знать лучше. Старые привычки сильно умирают, а Sublime делает слишком легким использование отрывков и забывает детали.

Решение: проблема не была в пространстве имен, это было определенно вызвано использованием php <? короткий тег вместо полного <?PHP тег.

Спасибо за дополнительный набор глаз.

Другие вопросы по тегам