Могу ли я использовать зарезервированные имена 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 или что-то вроде этого, чтобы достичь своей цели, но я думаю (как и другие люди, которые ответили вам), что это не очень хорошая идея :)

HTH!


вдоль линий того, что упомянул Бенджамин, есть интересное использование "клона" (который зарезервирован) в этом класс строка 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);
    }
}