是否可以通过引用传递函数?因此,每次调用引用变量时,都会调用该函数。看看我的代码。
<?php
class Documents {
private static $docs = array(
'She went to the toilet and on her way back, opened the wrong door',
'She had found something that would mean she\'d never be poor again - but there was a catch',
'It was just for one night',
'He watched, helpless, as the door closed behind her'
);
public static function get() {
return self::$docs[array_rand(self::$docs)];
}
}
class Printer {
public static $content;
}
Printer::$content = &Documents::get();
echo Printer::$content;
echo "\n" . Printer::$content;
echo "\n" . Printer::$content;
现在它会打印3条相似的行,但我希望每次打印Documents::get()
时都会打Printer::$content
,因为Printer::$content = **&**Documents::get();
是参考。
答案 0 :(得分:3)
不,你不能拥有一个你视为变量的变量,尽管如此,它仍然在幕后运行代码。如果你写$foo
,那就是使用变量的值。只有你写$foo()
才明确执行一个函数。
话虽如此,在某些情况下会隐式调用对象方法。例如,如果$foo
是一个对象,并且您在字符串上下文中使用它:
echo $foo;
这将(尝试)隐式调用$foo->__toString()
。
请不要以某种方式滥用这个隐含的方法调用来做任何花哨的事情。如果要调用函数,请调用函数。您甚至可以从其他函数返回函数,因此不乏传递函数的可能性。但是,您必须使用()
明确地调用它们。
答案 1 :(得分:0)
有变量函数:
php > function foo($bar) { echo $bar; }
php > $baz = 'foo';
php > $baz('qux');
qux
但你不能让PHP自动执行那个&#34;引用&#34;简单地访问变量时的函数,例如:
php > $baz;
php >
如您所见,未调用foo
函数,并且未执行任何输出。没有()
来表示函数调用,该变量就像任何其他变量一样 - 它只是一个字符串,其内容恰好与特定函数相同。它是()
使字符串&#34;可执行的&#34;。
请注意,应该避免使用变量函数,虽然它们在某些有限的情况下很有用,因为它们可能导致意大利面条代码和难以调试的错误。
答案 2 :(得分:0)
您可以使用魔术方法__get()
。
class Printer {
public function __get($name)
{
switch($name) {
case "content":
return Documents::get();
break;
default:
return $this->$name;
break;
}
}
}
但这不能在静态环境中完成。所以你必须有一个打印机实例。 (也许使用单身?)