Подтвердить что ты не робот

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().

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

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

Подробнее о руководстве для более подробной информации