公共函数内部的函数?
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
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果您使用 PHP 5.3 或更高版本,您可以尝试
If you're using PHP 5.3 or higher, you can try
它在 PHP 5.2.5 中对我有用 以及 PHP 5.2.11。
手册没有说明任何值得注意的版本要求,所以我我希望它可以在任何 PHP5 版本中工作 - 也许也可以在后期的 PHP4 中工作。
更新
您的测试用例略有损坏,因为您的内部函数不是您的类的成员,但您试图这样调用它。
内部函数实际上成为一个全局函数(如果多次调用外部函数,您将收到重新定义错误!)。
所以,我建议不要这样做。
如果您确实想要这个,请调用
$head_start()
,而不是$this->head_start()
。It works for me in PHP 5.2.5 and in PHP 5.2.11.
The manual doesn't state any notable version requirements, so I'd expect this to work in any PHP5 version — and perhaps late PHP4, too.
Update
Your testcase is slightly broken, in that your inner function is not a member of your class, yet you are trying to call it as such.
The inner function actually becomes a global function (and you will get a redefinition error if you call the outer function more than once!).
So, I'd recommend not doing this.
If you still really want this, call
$head_start()
, not$this->head_start()
.它工作正常,但不是很有用。
PHP 将在第一次调用时执行
outer()
。在内部,它将找到函数inner()
的函数声明,并将对其进行解析。现在您可以使用global函数inner
了。请注意,该函数不是类的一部分,它只是一个常规的全局函数。如果再次调用outer()
,PHP 将再次遇到名为inner
的函数的函数声明,并将停止执行,并抱怨您不能在线重新声明函数内部...
。因此,虽然它有效(取决于您想要实现的目标),但它不是一个非常有用的模式。
It works fine, but isn't very useful.
PHP will execute
outer()
the first time it's called. Inside, it will find a function declaration for the functioninner()
, which it will parse. Now you have the global functioninner
available for use. Note, the function is not part of the class, it's just a regular global function. Ifouter()
is ever called again though, PHP will again encounter the function declaration for a function calledinner
and will stop execution, complaining that youcan't redeclare function inner on line ...
.Therefore, while it works (depending on what you want to achieve), it's not a very useful pattern.
在 PHP OOPS 的公共函数中使用此箭头函数的最佳方法
$fn1 = fn($x) => $x + $y;
了解更多:
https://www.php.net/manual/en/functions.arrow。 php
Best way to use this arrow function inside the public function of PHP OOPS
$fn1 = fn($x) => $x + $y;
For More:
https://www.php.net/manual/en/functions.arrow.php