PHP相当于Python的__name__==“__main__”?

根据标题,是否有PHP等效于?__name__ == "__main__"

对于通过命令行和 Web 请求执行的脚本,是否有一些内容是有效的,还是需要自定义函数?

对于那些不熟悉Python的人来说,允许你定义一个模块文件,并且还有一些东西允许你运行它,如果它是入口点。PHP 中的等效结构类似于以下内容:__name__ == "__main__"

// SomeClass.php
<?php
class SomeClass
{
    function doStuff() {
        echo "wahey!\n";
    }
}

// python, I know.
if (__name__ == "__main__") {
    $sc = new SomeClass;
    $sc->doStuff();
}
?>

// OtherClass.php
<?php
require_once("SomeClass.php");
class OtherClass
{
    public $yep;
}
?>

// command line:
php SomeClass.php     // outputs "wahey!"
php OtherClass.php    // outputs nothing

注意zerkms的答案是最好的,但不太正确 - 它应该是:

if (!debug_backtrace()) {
    // do useful stuff
}

这比!count(debug_backtrace())快得多,它本身的速度大约是我涉及realpath()的解决方案的两倍。


答案 1
if (!count(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)))
{
    // some usefull stuff
}

查看 https://www.php.net/manual/en/function.debug-backtrace.php 以获取有关debug_backtrace功能的更多详细信息


答案 2
if ($argv && $argv[0] && realpath($argv[0]) === __FILE__) {
    // ...
}

就像一个魅力。

当您在命令行中运行php时,php文件的名称将传递给程序as和魔术变量意味着当前文件。因此,我们检查正在运行的程序在逻辑上是否等于Python的当前文件。$argv[0]__FILE____name__ == "__main__"


推荐