根据标题,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()的解决方案的两倍。
答案 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了解详情