PHP与Python的等价物';s_uuuname_uuuu==”等__主要的;?

PHP与Python的等价物';s_uuuname_uuuu==”等__主要的;?,php,main,Php,Main,根据标题,是否有PHP等价物\uuuuu name\uuuuu==“\uuuuu main\uuuuu” 对于通过命令行和通过web请求执行的脚本,是否存在可以同时工作的功能,或者是否需要自定义功能 对于那些不熟悉Python的人来说,\uuuuuu name\uuuu==“\uuuuu main\uuuuu”允许您定义一个模块文件,如果它是入口点,还允许您运行它。PHP中的等效结构类似于: // SomeClass.php <?php class SomeClass { func

根据标题,是否有PHP等价物
\uuuuu name\uuuuu==“\uuuuu main\uuuuu”

对于通过命令行和通过web请求执行的脚本,是否存在可以同时工作的功能,或者是否需要自定义功能

对于那些不熟悉Python的人来说,
\uuuuuu name\uuuu==“\uuuuu main\uuuuu”
允许您定义一个模块文件,如果它是入口点,还允许您运行它。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
这明显快于!count(debug_backtrace()),它本身的速度大约是我涉及realpath()的解决方案的两倍


有关调试回溯函数的更多详细信息,请参阅。您可能需要一个“神奇常数”。根据您试图执行的操作,
\uuuuuuuuuu文件
\uuuuuu函数
\uuuuuuu类
可能会为您提供所需的信息

它们是不言自明的:

  • \uuuuu文件\uuuu
    提供当前文件名
  • \uuuu函数\uuuu
    提供当前函数的名称
  • \uuuuu类\uuuu
    提供当前类的名称
查看更多详细信息

if ($argv && $argv[0] && realpath($argv[0]) === __FILE__) {
    // ...
}
工作起来很有魅力


当您在命令行中运行php时,php文件的名称将作为
$argv[0]
\uuuuuu文件魔术变量mean current file传递给程序。因此,我们检查正在运行的程序是否当前文件逻辑上等于Python的
\uuu name\uuuu==“\uuu main\uuuu”

,但我该如何用这些文件实现我的要求呢?看起来你已经在自己的答案中找到了:)我认为
(realpath($argv[0])==\uuu file\uuuuu>可能会做到。我的答案和计数呢(debug_backtrace())?它是如何变得更加令人厌恶的?“if(!debug_backtrace())”在代码中清楚地说“如果没有回溯,那么…”。所以,微观优化可能是这样,但为什么要编写一些可以说不清晰且速度较慢的代码呢?因为它依赖于隐式php casting array()->false。我认为这是显式的“如果元素计数为0”更清晰。因此,我认为使用您的案例的原因只是“从您的角度来看是可读的”,而不是“优化问题”"仅供参考,代码片段中有一个错误,它需要在if条件的末尾加上一个右括号。不允许我编辑它,因为编辑需要6个字符或更多。非常非常非常糟糕的答案…根本没有解释。你看,程序员永远不应该使用代码,因为它是有效的,这是最糟糕的做法。是的,但这是一个问答至少一些解释会很好。只发布代码是不好的。特别是考虑到PHP没有最好的文档。
if (!count(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)))
{
    // some usefull stuff
}
if ($argv && $argv[0] && realpath($argv[0]) === __FILE__) {
    // ...
}