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

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

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

Ответы [ 6 ]

28 голосов
/ 14 марта 2011

Нет , Вы не можете . Слава богу.

23 голосов
/ 26 июля 2011

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

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 Боюсь.

2 голосов
/ 14 марта 2011

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

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

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

1 голос
/ 14 марта 2011

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

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

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

HTH!

0 голосов
/ 10 мая 2019

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

foreach($array as $key => $line){
    if($key == "resource"){
        $key = "resources";
        $array->$key = $line;
    }
}
0 голосов
/ 28 декабря 2015

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