As per the title, is there PHP equivalent of __name__ == "__main__"
?
Is there something that would work for both scripts executed through the command line and through a web request, or would a custom function be needed?
For those unfamiliar with Python, __name__ == "__main__"
allows you to define a module file, and also have some things that allow you to run it if it is the entry point. The equivalent structure in PHP would resemble this:
// 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
Note: zerkms' answer is the best, but is not quite right - it should read:
if (!debug_backtrace()) {
// do useful stuff
}
This is significantly faster than !count(debug_backtrace()), which itself is about twice as fast as my solution involving realpath().
if (!count(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)))
{
// some usefull stuff
}
look at https://www.php.net/manual/en/function.debug-backtrace.php for more details on debug_backtrace function
if ($argv && $argv[0] && realpath($argv[0]) === __FILE__) {
// ...
}
works like a charm.
when you run php in command line, the name of php file will pass to program as $argv[0]
and __FILE__
magic variable mean current file. So we check the running program is current file logically equals Python's __name__ == "__main__"
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With