• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Python's "if __name__ == '__main__'" in PHP

  • Ersteller Ersteller Gelöschtes Mitglied 17819
  • Erstellt am Erstellt am
G

Gelöschtes Mitglied 17819

Guest
Vielleicht kennt das einer aus Python, folgendes Skript wird nur ausgeführt, wenn die ausgeführte Datei nicht eingebunden wurde, sondern wirklich als oberste ausgeführt wurde. Vorteil hat das zum Beispiel bei Klassen, die eingebunden werden können ohne dass man den Code ausführt der für ihre "eigentliche Ausführung" nötig wäre.

Code:
if __name__ == '__main__':
    // make something

Ich habe schon folgendes gefunden: <http://code.activestate.com/recipes/303971/>, aber leider geht das nur wenn ich die Datei über die Kommandozeile ausführe.

Wäre sehr dankbar, wenn jemand etwas für mich wüsste.

Gruß, Eugen.

Crossposting: Python's "if __name__ == '__main__'" in PHP - php.de
 
Mir fällt folgendes ein:
Code:
if (count(get_included_files()) == 0) {

}
sofern das Script selbst nicht inkludiert, bzw. erst in der Bedingung.
 
Mir fällt folgendes ein:
Code:
if (count(get_included_files()) == 0) {

}
sofern das Script selbst nicht inkludiert, bzw. erst in der Bedingung.

Inkludiert sich schon
PHP:
if (count(get_included_files()) == 1) {
"works like a charm"

Großen Dank!
 
in deiner ersten datei ganz oben einfach

PHP:
define('MAIN_FILE', __FILE__);

und da wo du wissen willst ob du in der datei bist schreibst du

PHP:
if(defined('MAIN_FILE') && MAIN_FILE == __FILE__) {
    // mach was
}

aber warum willst du das machen? mir fällt absolut kein fall ein in dem soetwas notwendig währe
 
PHP:
<?php
class Foobar
{
     public function __construct()
     {
         echo "gibt 'ne coole Webseite aus";
     }
}

if (count(get_included_files()) == 0) {
    new Foobar();
}
Ansonsten bindet man das Script per include ein und kann Foobar einfach in den eigenen Scripten benutzen.
 

Weil ich das Skript (für Directory Listing) möglichst auf eine Datei beschränken möchte.

crash schrieb:
PHP:
   <?php
class Foobar
{
     public function __construct()
     {
         echo "gibt 'ne coole Webseite aus";
     }
}

if (count(get_included_files()) == 0) {
    new Foobar();
}

PHP:
if (count(get_included_files()) == 1) {

Ich will ja wieder kein Klugscheißer sein, aber jemand der sich auf den Thread verirrt, wird möglicherweise sich wundern, wieso es nicht klappt ;-)
 
Wieso Klugscheißer? Was falsch ist ist falsch. Ich wusste nicht, dass die aktuelle Datei mitzählt.

Habe das natürlich auf der Console getestet und da ist es 0:
crash[~]$ php -r 'var_dump(get_included_files());'
array(0) {
}
 
Wieso Klugscheißer? Was falsch ist ist falsch. Ich wusste nicht, dass die aktuelle Datei mitzählt.

Habe das natürlich auf der Console getestet und da ist es 0:

Code:
$ cat argv.php 
<?php 
echo $argv[0]."\n"; 
print_r(get_included_files());
echo "\n";
?>


$ php argv.php 
argv.php
Array
(
    [0] => /home/eugen/Projekte/Liste/php.scripts/argv.php
)


$ php -v
PHP 5.2.6-3ubuntu4 with Suhosin-Patch 0.9.6.2 (cli) (built: Mar 31 2009 02:07:08) 
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
Ich könnte zwar den ganzen Dreck auf meinem Server testen, aber ich denke, bei dir gibt er nichts aus, weil du den Code direkt eingegeben hast. ;-)

EDIT: Es lag wirklich daran: newroots pastebin
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben