PHP equivalent of Python's __name__ == “__main__”?

≡放荡痞女 提交于 2019-12-20 09:15:54

问题


As per the title, is there PHP equivalent of __name__ == "__main__"?

Is there something that would work for both scripts executed through the command line and through a web request, or would a custom function be needed?

For those unfamiliar with Python, __name__ == "__main__" allows you to define a module file, and also have some things that allow you to run it if it is the entry point. The equivalent structure in PHP would resemble this:

// 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

Note: zerkms' answer is the best, but is not quite right - it should read:

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

This is significantly faster than !count(debug_backtrace()), which itself is about twice as fast as my solution involving realpath().


回答1:


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

look at https://www.php.net/manual/en/function.debug-backtrace.php for more details on debug_backtrace function




回答2:


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

works like a charm.

when you run php in command line, the name of php file will pass to program as $argv[0] and __FILE__ magic variable mean current file. So we check the running program is current file logically equals Python's __name__ == "__main__".




回答3:


You probably want one of the "Magic Constants". Depending on what you are trying to do, __FILE__, __FUNCTION__ or __CLASS__ may give you the information you are after.

They are pretty self explanatory:

  • __FILE__gives you the current file name
  • __FUNCTION__ gives you the name of the current function
  • __CLASS__ gives you the name of the current class.

Check the manual for more details



来源:https://stackoverflow.com/questions/2413991/php-equivalent-of-pythons-name-main

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!