是否可以用类方法创建函数?
即
class Test {
public function __construct()
{
if ( ! function_exists('foo') ) {
function foo ()
{
return $this->foo();
}
}
}
private function foo()
{
return 'bar';
}
}
或者我是否必须反过来创建一个函数并在方法中使用它?
答案 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();
然而,这非常难看,你不想这样做。
如果您想要更多类似JavaScript的对象,请查看
但是,即使是那里建议的技术也是kludges imo。