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