将函数赋给类方法

时间:2012-06-15 09:42:56

标签: php

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

class Test {

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

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

}

或者我是否必须反过来创建一个函数并在方法中使用它?

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:0)

  

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

PHP中的函数不是一等公民,你不能像PHP中的变量那样复制函数。你可以在a reference to a function左右移动,但不能移动函数本身。

答案 2 :(得分:0)

理论上,您可以use Reflection to get a Closure,通过$GLOBALS引用它,然后定义一个函数foo,以便从$GLOBALS调用Closure,例如

<?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();

Run Demo

然而,这非常难看,你不想这样做。

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

但是,即使是那里建议的技术也是kludges imo。