12

我想创建一个名为“new”的函数和一个名为“case”的类。

我可以在 PHP 中做到这一点吗?

4

6 回答 6

29

不能。感谢上帝。

于 2011-03-14T12:25:39.283 回答
29

实际上,虽然定义这样的方法会导致解析错误,但使用它不会,这允许某种解决方法:

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

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

可追溯到 2004 年的相关功能请求仍处于开放状态。

编辑 2016 年 1 月

从 PHP 7 开始,现在可以使用迄今为止受限制的关键字来命名您的方法,这要归功于Context Sensitive Lexer

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

Case但是,恐怕您仍然无法命名您的班级。

于 2011-07-26T16:05:15.570 回答
2

你不能这样做,另一种选择是只使用 _case() 或 _new() 作为函数名

另请查看:

是否可以在 PHP 中“转义”方法名称,以便能够拥有与保留关键字冲突的方法名称?

于 2011-03-14T12:28:26.657 回答
1

默认情况下这是不可能的,它们是保留字,您不能使用它们。

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

可能你可以重新编译 PHP 或类似的东西来实现你的目标,但我认为(作为回答你的其他人)这不是一个好主意:)

于 2011-03-14T12:26:29.323 回答
0

按照本杰明提到的内容,“克隆”有一个有趣的用法,在这个中(保留) ,第 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);
    }
}
于 2015-12-28T08:36:29.547 回答
0

我刚刚重命名了课程来解决我的问题。

foreach($array as $key => $line){
    if($key == "resource"){
        $key = "resources";
        $array->$key = $line;
    }
}
于 2019-05-10T13:06:16.347 回答