公共函数内部的函数?

发布于 2024-12-11 19:25:01 字数 942 浏览 0 评论 0 原文

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
class ea_framework {

    public function outer() {

        function inner() {

        }

    }

}

This doesn't seem to be possible?

I'm really new to PHP Classes any advice would be appreciated!

Here's my test case:

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

Error:

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

失与倦" 2024-12-18 19:25:01

如果您使用 PHP 5.3 或更高版本,您可以尝试

$inner = function() { ... }
...
$inner();

If you're using PHP 5.3 or higher, you can try

$inner = function() { ... }
...
$inner();
微暖i 2024-12-18 19:25:01

在 PHP 5.2.5 中对我有用 以及 PHP 5.2.11

手册没有说明任何值得注意的版本要求,所以我我希望它可以在任何 PHP5 版本中工作 - 也许也可以在后期的 PHP4 中工作。


更新

您的测试用例略有损坏,因为您的内部函数不是您的类的成员,但您试图这样调用它。

内部函数实际上成为一个全局函数(如果多次调用外部函数,您将收到重新定义错误!)。

PHP 中的所有函数和类都具有全局作用域 - 即使它们是在函数内部定义的,也可以在函数外部调用它们,反之亦然。

所以,我建议不要这样做。

如果您确实想要这个,请调用 $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!).

All functions and classes in PHP have the global scope - they can be called outside a function even if they were defined inside and vice versa.

So, I'd recommend not doing this.

If you still really want this, call $head_start(), not $this->head_start().

大姐,你呐 2024-12-18 19:25:01

它工作正常,但不是很有用。

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 function inner(), which it will parse. Now you have the global function inner available for use. Note, the function is not part of the class, it's just a regular global function. If outer() is ever called again though, PHP will again encounter the function declaration for a function called inner and will stop execution, complaining that you can't redeclare function inner on line ....

Therefore, while it works (depending on what you want to achieve), it's not a very useful pattern.

贵在坚持 2024-12-18 19:25:01

在 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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文