В соответствии с заголовком, существует ли 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__ дает имя текущего класса. Подробнее см. Руководство.