PHP相当于Python的__name__ =="__ main__"?

Sha*_*obe 34 php program-entry-point

根据标题,是否有PHP相当于__name__ == "__main__"

有什么东西适用于通过命令行和Web请求执行的脚本,还是需要自定义函数?

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

// 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
Run Code Online (Sandbox Code Playgroud)

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

if (!debug_backtrace()) {
    // do useful stuff
}
Run Code Online (Sandbox Code Playgroud)

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

zer*_*kms 32

if (!count(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)))
{
    // some usefull stuff
}
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考,代码片段中存在错误,在if条件结束时需要额外的结束括号.不允许我编辑它,因为编辑需要6个字符或更多. (2认同)
  • 非常非常糟糕的答案......**NO**解释完全没有.你看,程序员不应该使用代码,因为它有效,这是所有人的错误做法. (2认同)

sma*_*wjw 8

if ($argv && $argv[0] && realpath($argv[0]) === __FILE__) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

奇迹般有效.

当您在命令行中运行php时,php文件的名称将传递给程序,$argv[0]__FILE__magic变量则表示当前文件.所以我们检查正在运行的程序是当前文件在逻辑上等于Python的__name__ == "__main__".