PHP相当于Python的__name__ ==“__ main__”?

时间:2010-03-10 01:46:24

标签: php

根据标题,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

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

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

这明显快于!count(debug_backtrace()),它本身的速度是我的涉及realpath()的解决方案的两倍。

3 个答案:

答案 0 :(得分:30)

if (!count(debug_backtrace()))
{
    // some usefull stuff
}

答案 1 :(得分:7)

select t1.*
from openrowset(bulk 'c:\folder\file1.csv'
        , formatfile = 'c:\folder\values.fmt'
        , firstrow = 2) as t1
where t1.[TIME] is not null

就像一个魅力。

当您在命令行中运行php时,php文件的名称将作为if ($argv && $argv[0] && realpath($argv[0]) === __FILE__) { // ... } 传递给程序,$argv[0]魔术变量意味着当前文件。所以我们检查正在运行的程序当前文件在逻辑上等于Python的__FILE__

答案 2 :(得分:0)

你可能想要一个“魔术常数”。根据您的目的,__FILE____FUNCTION____CLASS__可能会为您提供所需信息。

他们非常自我解释:

  • __FILE__为您提供当前文件名
  • __FUNCTION__为您提供当前功能的名称
  • __CLASS__为您提供当前班级的名称。

查看the manual了解详情