我想创建一个名为“new”的函数和一个名为“case”的类。
我可以在 PHP 中做到这一点吗?
实际上,虽然定义这样的方法会导致解析错误,但使用它不会,这允许某种解决方法:
class A {
function __call($method, $args) {
if ($method == 'new') {
// ...
}
}
}
$a = new A;
$a->new(); // works!
可追溯到 2004 年的相关功能请求仍处于开放状态。
从 PHP 7 开始,现在可以使用迄今为止受限制的关键字来命名您的方法,这要归功于Context Sensitive Lexer:
class Foo {
public function new() {}
public function list() {}
public function foreach() {}
}
Case
但是,恐怕您仍然无法命名您的班级。
默认情况下这是不可能的,它们是保留字,您不能使用它们。
http://www.php.net/manual/en/reserved.keywords.php
可能你可以重新编译 PHP 或类似的东西来实现你的目标,但我认为(作为回答你的其他人)这不是一个好主意:)
!
按照本杰明提到的内容,“克隆”有一个有趣的用法,在这个类中(保留) ,第 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;
}
}