class ea_framework {
public function outer() {
function inner() {
}
}
}
这似乎不可能?
我是PHP类的新手,任何建议都会受到赞赏!
这是我的测试用例:
# Site Class
class ea_framework {
public function __construct() {
$this->init();
}
public function init() {
$this->header();
}
public function header() {
function head_start() {
# Doctype
echo "<!DOCTYPE html>\n";
# Begin HTML
echo "<html class='".agent()."'>\n";
# Begin HEAD
echo "<head>\n";
}
$this->head_start();
}
}
$bro = new ea_framework();
错误:
Fatal error: Call to undefined method ea_framework::head_start() in /home/tfbox/domains/ibrogram.com/public_html/i/construction/core/run.php on line 31
答案 0 :(得分:3)
如果您使用的是PHP 5.3或更高版本,则可以尝试
$inner = function() { ... }
...
$inner();
答案 1 :(得分:2)
works for me in PHP 5.2.5 and in PHP 5.2.11。
manual没有说明任何值得注意的版本要求,所以我希望这适用于任何PHP5版本 - 也许也可能是PHP4后期版本。
<强>更新强>
您的测试用例稍有破坏,因为您的内部函数不是您班级的成员,但您正试图将其称为。</ p>
内部函数实际上变成了全局函数(如果你多次调用外部函数,你将得到重定义错误!)。
PHP中的所有函数和类都具有全局范围 - 即使它们是在内部定义的,也可以在函数外部调用它们,反之亦然。
所以,我建议不要这样做。
如果你真的想要这个,请拨打$head_start()
,而不是$this->head_start()
。
答案 2 :(得分:2)
它工作正常,但不是很有用。
PHP将在第一次调用时执行outer()
。在里面,它将找到函数inner()
的函数声明,它将解析它。现在您可以使用全局函数inner
了。注意,该函数不是类的一部分,它只是一个常规的全局函数。如果再次调用outer()
,PHP将再次遇到名为inner
的函数的函数声明,并将停止执行,抱怨你can't redeclare function inner on line ...
。
因此,虽然它有效(取决于你想要达到的目的),但它并不是一个非常有用的模式。