PHP-эквивалент Python __name__ == "__main__"?

В соответствии с заголовком, существует ли PHP-эквивалент __name__ == "__main__" ?

Есть ли что-то, что могло бы работать как для сценариев, выполняемых в командной строке, так и через веб-запрос, или нужна ли специальная функция?

Для тех, кто не знаком с 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 ().

 if (!count(debug_backtrace())) { // some usefull stuff } 
 if ($argv && $argv[0] && realpath($argv[0]) === __FILE__) { // ... } 

работает как шарм.

при запуске php в командной строке имя файла php будет передаваться программе в виде $argv[0] и __FILE__ магии переменной текущего текущего файла. Таким образом, мы проверяем, что текущая программа является текущим файлом, логически равным __name__ == "__main__" Python __name__ == "__main__" .

Вероятно, вам нужна одна из «Волшебных констант». В зависимости от того, что вы пытаетесь сделать, __FILE__ , __FUNCTION__ или __CLASS__ могут предоставить вам информацию, которую вы используете.

Они довольно понятны:

  • __FILE__ дает вам текущее имя файла
  • __FUNCTION__ дает имя текущей функции
  • __CLASS__ дает имя текущего класса.

Подробнее см. Руководство.