Ошибка выполнения php

У меня есть PHP-скрипт, который выдает следующую ошибку

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданное '[', ожидание ')' в /home/masked/public_html/masked/AutoLoader.php в строке 20

(обратите внимание, что я замаскировал некоторые части каталога, поскольку они соответствуют личной информации.)

(строка 20 — это spl_autoload_register([$autoloader, 'load']); найдено в функции регистрации.

Я использую PHP 5.5. Я также пробовал его с PHP 5.3.27 и получил точно такой же результат.

код ниже

run.php

require_once 'AutoLoader.php';
AutoLoader::register('src');

Автозагрузчик.php

/**
 * A basic PSR style autoloader
 */
class AutoLoader
{
    protected $dir;
    protected $ext;

    public function __construct($dir, $ext = '.php')
    {
        $this->dir = rtrim($dir, DIRECTORY_SEPARATOR);
        $this->ext = $ext;
    }

    public static function register($dir, $ext = '.php')
    {
        $autoloader = new static($dir, $ext);
        spl_autoload_register([$autoloader, 'load']);

        return $autoloader;
    }

    public function load($class)
    {
        $dir = $this->dir;

        if ($ns = $this->get_namespace($class)) {
            $dir .= DIRECTORY_SEPARATOR.str_replace('\\', DIRECTORY_SEPARATOR, $ns);
        }

        $inc_file = $dir.DIRECTORY_SEPARATOR.$this->get_class($class).$this->ext;

        if (file_exists($inc_file)) {
            require_once $inc_file;
        }
    }

    // Borrowed from github.com/borisguery/Inflexible
    protected static function get_class($value)
    {
        $className = trim($value, '\\');

        if ($lastSeparator = strrpos($className, '\\')) {
            $className = substr($className, 1 + $lastSeparator);
        }

        return $className;
    }

    // Borrowed from github.com/borisguery/Inflexible
    public static function get_namespace($fqcn)
    {
        if ($lastSeparator = strrpos($fqcn, '\\')) {
            return trim(substr($fqcn, 0, $lastSeparator + 1), '\\');
        }

        return '';
    }

}

person megaman    schedule 04.04.2014    source источник
comment
Какую версию PHP вы используете? Пожалуйста, проверьте дважды. Для определения массивов с использованием синтаксиса [] (согласно spl_autoload_register([$autoloader, 'load']);) требуется PHP ›= 5.4   -  person Mark Baker    schedule 05.04.2014
comment
Отлично работает здесь, хотя очевидно, что это немного отличается от использования двух файлов. Тем не менее, вы уверены, что в этом коде больше ничего нет?   -  person raina77ow    schedule 05.04.2014
comment
@MarkBaker «Я использую PHP 5.5». Но да, чем больше я думаю об этом, тем больше я уверен, что это может быть единственной разумной причиной. )   -  person raina77ow    schedule 05.04.2014
comment
@SamCoppock Это может показаться странным, но не могли бы вы добавить echo phpversion() в самое начало файла run.php, чтобы убедиться, что это действительно PHP 5.5?   -  person raina77ow    schedule 05.04.2014
comment
Проверьте с помощью php -i | grep "PHP Version" из cli или с помощью phpinfo() из Интернета.   -  person Mark Baker    schedule 05.04.2014
comment
Идем с другой стороны: что произойдет, если вы замените [$autoloader, 'load'] на array($autoloader, 'load')?   -  person raina77ow    schedule 05.04.2014
comment
Это может быть ошибкой PHP, но более вероятно, что вы ошиблись в версии PHP. Откройте терминал и проверьте версию, используя php -v (или echo phpversion(); в файле PHP).   -  person Sverri M. Olsen    schedule 05.04.2014
comment
ах - мой сервер работал 5.3.27 я, должно быть, нажал не ту кнопку в cpannel, когда пытался его изменить   -  person megaman    schedule 05.04.2014
comment
Это подводит меня к новому вопросу. Когда вы сказали «Определение массивов с использованием синтаксиса []» (согласно spl_autoload_register([$autoloader, 'load']); как еще вы можете передать те же данные в функцию, если бы вам пришлось писать массив с дескриптор и ввод, например $array =['a'-›$autoloader,'b'-›'load'];   -  person megaman    schedule 05.04.2014
comment
@SamCoppock: Нет, как и было прокомментировано: stackoverflow .com/questions/22873856/ - php.net/array   -  person hakre    schedule 05.04.2014
comment
Кроме того, это распространенная ошибка, описанная в справочнике по ошибкам PHP, который мы храним здесь, в Stackoverflow: stackoverflow.com/questions/12769982/   -  person hakre    schedule 05.04.2014


Ответы (1)


В run.php попробуйте:

require_once('Autoloader.php');
person Herland Cid    schedule 04.04.2014