PHP如何创建名为“的函数”;做什么;?

PHP如何创建名为“的函数”;做什么;?,php,function,reserved-words,Php,Function,Reserved Words,我看到一个名为“do”的库 完全脱离语法分析器 分析错误:语法错误,意外的T\u DO,应为中的T\u字符串 //same on call $obj->do() 分析错误:语法错误,意外的T_DO,应为T_字符串或T_变量或“$”在 顺便说一下,Gearman使用了一个“do”函数 将函数命名为关键字是个坏主意。它的名字也可能更糟糕,因为do不是很有描述性 选择更好的名称。“do”是保留的关键字: 在同一页的评论中,你会看到一个用户提到了解决这个问题的方法。请记住,使用此方法时必须小

我看到一个名为“do”的库

完全脱离语法分析器 分析错误:语法错误,意外的T\u DO,应为中的T\u字符串

//same on call 
$obj->do() 
分析错误:语法错误,意外的T_DO,应为T_字符串或T_变量或“$”在

顺便说一下,Gearman使用了一个“do”函数


将函数命名为关键字是个坏主意。它的名字也可能更糟糕,因为
do
不是很有描述性

选择更好的名称。

“do”是保留的关键字:

在同一页的评论中,你会看到一个用户提到了解决这个问题的方法。请记住,使用此方法时必须小心:

// Now define a __call() method (requires PHP > 5.2.3 to take effect)
public function __call($func, $args)
{
    switch ($func)
    {
        case 'list':
            return $this->ls((isset($args[0]))? $args[0]: null);
        break;
        case 'unset':
            return $this->rm($args[0]);
        break;
        default:
            trigger_error("Call to undefined method ".__CLASS__."::$func()", E_USER_ERROR);
        die ();
    }

因此,您可以通过使用
\u调用
重载在任何类中使用
do
方法(或其他一些保留字)。从外部来看,此方法与传统定义的方法无法区分。

gearman是一个pecl扩展,用c编写。因此,php解析器不会解析它。PHP实际上允许您调用do()方法,但不允许您在声明内容时定义或使用此保留关键字。如果您查看gearman代码,您会注意到:

    class MyClass {
        function _do() {
            echo "doing something";
        }

        function __call( $methodName, $arguments ) {
            if( $methodName == 'do' ) {
                $this->_do();
            }
        }
    }

    $myObject = new MyClass();
    $myObject->do();
__PHP_ME_MAPPING(do, gearman_client_do, arginfo_oo_gearman_client_do, 0)

所以他们就是这样做的,你不能从php本身来做

我别无选择。我正在为上面有“do”方法的Gearman创建一个虚拟类文件。“我知道这是一个保留词,但他们让它起作用了,我不知道怎么做。”丹尼尔,这是一个逃避回答。他问这是怎么可能的,而不是他应该还是不应该。@Geocine:也许你应该在你的问题中解释一下。无论你在哪里放置保留字,它都不会工作,解析器会发出呜呜声,而我正在类中使用它。克里斯回答了我的问题。谢谢谢谢我知道do是一个保留字,你回答了我的问题。你应该在问题中说明你的目的是创建一个模拟对象。发布我10分钟前发布的相同答案有什么特别的用途吗P@Chris没有注意到,我正在做一些研究,以确保它是正确的答案,然后点击了帖子。
__PHP_ME_MAPPING(do, gearman_client_do, arginfo_oo_gearman_client_do, 0)