Я хотел бы создать функцию под названием "new" и класс "case".
Могу ли я сделать это в PHP?
Я хотел бы создать функцию под названием "new" и класс "case".
Могу ли я сделать это в PHP?
Собственно, при определении такого метода возникает ошибка синтаксического анализа, его использование не выполняется, что позволяет использовать некоторые способы обхода:
class A {
function __call($method, $args) {
if ($method == 'new') {
// ...
}
}
}
$a = new A;
$a->new(); // works!
Относительный запрос функции, относящийся к 2004 году, по-прежнему открыт.
Начиная с PHP 7, теперь возможно назвать ваши методы с использованием ключевых слов, которые были ограничены до сих пор, благодаря Контекст Чувствительный Lexer:
class Foo {
public function new() {}
public function list() {}
public function foreach() {}
}
Вы все еще не можете назвать класс Case
, я боюсь.
Вы не можете этого сделать, альтернативным вариантом является просто использовать _case() или _new() в качестве имен функций
Также проверьте:
По умолчанию это невозможно, это зарезервированные слова, и вы не можете их использовать.
http://www.php.net/manual/en/reserved.keywords.php
Может быть, вы можете перекомпилировать PHP или что-то подобное для достижения своей цели, но я думаю (как другие люди, которые ответили вам), что это не очень хорошая идея:)
НТН!
В соответствии с тем, что упомянул Бенджамин, в этом классе интересна использование "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);
}
}
Я просто переименовал класс, чтобы преодолеть мою проблему.
foreach($array as $key => $line){
if($key == "resource"){
$key = "resources";
$array->$key = $line;
}
}