«__main__» == __name__ in PHP

Когда пишешь на нескольких языках, начинаешь привносить в код разные практики из других ЯП. Я буду писать для себя шпаргалки и мелкие заметки по теме как реализовать то-то и то-то в PHP, Python, Node.js.

В python скриптах есть устоявшаяся практика, как я понял, вызывать код, если дергается сам скрипт и быть библиотекой, если скрипт импортится куда-то. Пример:

def main():
...some code...
#end

if "__main__" == __name__:
main()

Мне понравилась эта практика и захотелось такое же делать и в PHP. Раньше даже как-то в голову не приходило так использовать скрипты. Если очень хочется, то такое же поведение в PHP можно реализовать кодом:

<?php declare(strict_types=1);
function main() {
...some code...
}
if ($argv[0] == basename(__FILE__)) {
main();
}

Минус именно этого варианта и бага кроется в том, что если этот скрипт будет заимпортирован в файл с точно таким же именем, то это условие так же сработает. Это надо учитывать. Поэтому модифицируем код таким образом:

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

Теперь мы делаем проверку по полному пути к файлу. Вот теперь работает без ошибок. Есть еще один вариант, который я видел в сети, это проверка через количество в бэктрейсе:

if (count(debug_backtrace()) <  1) {...}
// or
if (!count(debug_backtrace())) {...}
// or
if (!debug_backtrace()) {...}

Вариант интересен и даже рабочий, но есть вероятность непредсказуемого поведения если поменяется API функции или вдруг функция будет переопределена (в PHP можно переопределять даже системные функции через специальное расширение).