Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 2

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

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

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

Относительный запрос функции, относящийся к 2004 году, по-прежнему открыт.

Изменить январь 2016

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

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

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

Ответ 4

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

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

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

НТН!

Ответ 5

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

Ответ 6

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

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