Могу ли я использовать зарезервированные имена PHP для своих функций и классов?

Я хотел бы создать функцию с именем "new" и класс с именем "case".

Могу ли я сделать это на PHP?

5 ответов

Решение

Нет, ты не можешь. Слава Богу.

На самом деле, определение такого метода приводит к ошибке синтаксического анализа, а его использование - нет, что допускает некоторые обходные пути:

class A {
    function __call($method, $args) {
        if ($method == 'new') {
            // ...
        }
    }
}

$a = new A;
$a->new(); // works!

Запрос о связанных функциях, начиная с 2004 года, все еще открыт.

Редактировать январь 2016

Начиная с PHP 7, теперь можно называть ваши методы, используя ключевые слова, которые были ограничены до сих пор, благодаря контекстно-зависимому лексеру:

class Foo {
    public function new() {}
    public function list() {}
    public function foreach() {}
}

Вы все еще не можете, однако, назвать свой класс Case Боюсь.

Вы не можете сделать это, альтернативный вариант - просто использовать _case() или _new() в качестве имен функций.

Также проверьте:

Можно ли "избежать" имени метода в PHP, чтобы иметь возможность иметь имя метода, которое конфликтует с зарезервированным ключевым словом?

По умолчанию это невозможно, это зарезервированные слова, и вы не можете их использовать.

http://www.php.net/manual/en/reserved.keywords.php

Может быть, вы можете перекомпилировать PHP или что-то подобное для достижения своей цели, но я думаю (как и другие люди, которые вам ответили), что это не очень хорошая идея:)

НТН!

Я просто переименовал класс, чтобы решить свою проблему.

foreach($array as $key => $line){
    if($key == "resource"){
        $key = "resources";
        $array->$key = $line;
    }
}

В соответствии с тем, что упомянул Бенджамин, есть интересное использование слова "клон" (которое зарезервировано) в этом классе, строка 545.

 public function __call($method, $args)
{
    if ('clone' == $method) {
        return call_user_func_array(array($this, 'cloneRepository'), $args);
    } else {
        $class = get_called_class();
        $message = "Call to undefined method $class::$method()";
        throw new \BadMethodCallException($message);
    }
}
Другие вопросы по тегам