1

是否可以从类方法中创建函数?

IE。

class Test {

    public function __construct()
    {
        if ( ! function_exists('foo') ) {
            function foo ()
            {
                 return $this->foo();
            }
        }
    }

    private function foo()
    {
        return 'bar';
    }

}

还是我必须反过来做,创建一个函数并在方法中使用它?

4

3 回答 3

0

我正在尝试创建一个作为类方法副本的全局函数。我来自 javascript 领域,其中函数只是变量,您可以轻松地复制它们......

PHP 中的函数不是一等公民,您不能像 PHP 中的变量一样复制函数。您可以传递对函数引用,但不能传递函数本身。

于 2012-06-15T10:25:00.847 回答
0

理论上,您可以使用 Reflection 来获取 Closure,通过引用它$GLOBALS,然后定义一个函数foo来调用Closure$GLOBALS例如

<?php // requires 5.4
class Test {

    public function __construct()
    {
        if (!function_exists('foo')) {
            $reflector = new ReflectionMethod(__CLASS__, 'foo');
            $GLOBALS['foo'] = $reflector->getClosure($this);
            function foo() {
                return call_user_func($GLOBALS['foo']);
            }
        }
    }

    private function foo()
    {
        return 'bar';
    }
}

$test = new Test();
echo foo();

运行演示

但是,这非常难看,您不想这样做。

如果您想要更多类似 JavaScript 的对象,请查看

但是,即使是其中建议的技术,也有一些杂乱无章的东西。

于 2012-06-15T10:30:26.157 回答
0

就那样做,php能做到

class Test {

    public function __construct()
    {
        if ( ! function_exists('foo') ) {
            function foo ()
            {
                 return $this->foo();
            }
        }
    }

    private function foo()
    {
        outsidefunction();
        return 'bar';
    }

}

private function outsidefunction()
{
   return 0;
}
于 2012-06-15T09:48:21.373 回答