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

时间:2010-02-20 16:09:33

标签: php escaping keyword identifier reserved-words

我正在使用PHP进行MVC,我希望在我的Controller中有一个list()方法,以获得URL / entity / list / parent_id,以显示属于该父级的所有“x”

但是,我不能有一个名为list()的方法,因为它是一个PHP保留关键字。

例如,在VB.Net中,如果我需要一个名称与保留关键字冲突的东西,我可以将它包装在[reserved_name]中。
在SQL中,你可以做同样的事情 在MySQL中,你使用反引号`

PHP中是否有一些语法指定“将其视为标识符,而不是关键字”?

(注意:我知道我可以使用路由来执行此操作而无需使用list()方法。我也可以简单地将操作调用为其他内容。问题是PHP是否提供了这种转义)

2 个答案:

答案 0 :(得分:5)

您可以使用__call()方法调用实现您功能的私有或公共_list()方法。

/**
 * This line for code assistance
 * @method  array list() list($par1, $par2) Returns list of something. 
 */
class Foo 
{
    public function __call($name, $args) 
    {
        if ($name == 'list') {
            return call_user_func_array(array($this, '_list'), $args);
        }
        throw new Exception('Unknown method ' . $name . ' in class ' . get_class($this));
    }

    private function _list($par1, $par2, ...)
    {
        //your implementation here
        return array();
    }
}

答案 1 :(得分:3)

使用变量名称,您可以使用括号:

${'array'} = "test";
echo ${'array'};

但PHP没有提供转义函数名的方法。

如果您想要一种“用户定义”的解决方法,请查看此评论:

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