Ankündigung

Einklappen
Keine Ankündigung bisher.

Abfrage: Klasse bereits includiert?

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • becks123
    hat ein Thema erstellt Abfrage: Klasse bereits includiert?.

    Abfrage: Klasse bereits includiert?

    Servus Leute,

    ich habe in verschiedenen Klassen andere Klassen includiert, die diese mit benutzen müssen.

    Wie kann ich abfragen, ob eine Klasse bereits "included" ist?

    Damit nicht folgender Fehler auftritt "Fatal error: Cannot redeclare class"

    Danke euch!!

  • Basti
    antwortet
    Zitat von Bruchpilot
    Und im Changelog steht, dass mit dieser Version
    überhaupt erst include/require_once hinzukam. Also bei den beiden gab es
    wohl nie einen Unterschied in diesem Bezug
    Doch, aber nur kurz:
    4.0 RC1 27-Mar-2000 require-once() und include_once()
    4.0 22-May-2000
    4.0.2 29-Aug-2000 gleiches Verhalten

    Zitat von axo
    die zweite variante ist natürlich besser - ein nicht benötigtes
    require_once() weniger und damit weniger overhead.
    das gilt aber nur solange man ganz sicher weiß (und garantieren
    kann), dass $b -> getForm() auch durch einen testfall aufgerufen
    wird. weiß man das nicht, halte ich die erste methode für 'besser',
    weil ein fehlendes oder falsch geschriebenes include mit höherer
    wahrscheinlichkeit beim testen auffällt.
    Es ist ein wenig sinnlos, das hier auszuführen. Wenn du Software auslieferst, die Methoden enthält die nicht getestet wurden (und hier geht es ja nur um einen einfachen Aufruf - nichtmal um das Verhalten der Methode), dann kannst du auch allen Code in eine einzige Datei packen, am besten in eine einzige Zeile oder so...

    Ich bevorzuge übrigends auch __autoload(). Ist einfach eine feine Sache, die Sorge, das der Code auch geladen wird einer Maschine zu überlassen. Für sowas sind diese Dinger doch da, oder?

    Basti

    Einen Kommentar schreiben:


  • imported_Ben
    antwortet
    Zitat von DerDesian
    Gerade für 'größere' Projekte braucht man eine derartige Zentralisierung, wenn man nicht SpagettiCode haben will.
    Indem man mit __autoload() arbeitet ersparst du dir aber die explizite Einbindung der Dateien.

    Du erstellst eine Instanz einer Klasse und bindest dann in der __autoload()-Funktion die entsprechende datei ein.

    Mein auto_prepend_file wäre "leicht" lang, wenn ich alle Dateien, die ich benötige einbinden würde.
    Und warum sollte ich die Klasse vB_News einbinden, wenn ich sie gar nicht brauche?

    Ich bin da lieber flexibel.

    Grüße Ben.

    Einen Kommentar schreiben:


  • axo
    antwortet
    ja, natürlich. nennen wir es dann also interpreter-time vs. execution-time ... oder was auch immer.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    ah so, ist aber beides runtime

    Einen Kommentar schreiben:


  • axo
    antwortet
    ach, das meine ich doch gar nicht.

    mal als beispiel:

    PHP-Code:
    <?php
    require_once('class.A.php'); 
    require_once(
    'HTML/QuickForm.php');  // erste variante
    class extends A{

      function 
    getForm() {
         require_once(
    'HTML/QuickForm.php');  // zweite variante
         
    $form = new HTML_QuickForm(); 
         ....
      }

      function 
    doSomething() {
         return 
    rand(1,100);
      }


    }

    ?>
    während man bei der ersten require_once() - variante (direkt im
    header-bereich der klassendatei) ein fehlendes (oder falsch
    geschriebendes ) require hat, bekommt man den 'fatal error'
    bereits, sobald man ein include von B macht, und nicht erst,
    wenn man $b -> getForm() ausführt.

    die zweite variante ist natürlich besser - ein nicht benötigtes
    require_once() weniger und damit weniger overhead.
    das gilt aber nur solange man ganz sicher weiß (und garantieren
    kann), dass $b -> getForm() auch durch einen testfall aufgerufen
    wird. weiß man das nicht, halte ich die erste methode für 'besser',
    weil ein fehlendes oder falsch geschriebenes include mit höherer
    wahrscheinlichkeit beim testen auffällt. darüberhinaus würden
    auch parse errors in den benutzten klassen im zweiten fall erst
    beim aufruf auffallen.

    das meine ich mit 'compile time' vs. 'runtime' ...

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Und im Changelog steht, dass mit dieser Version überhaupt erst include/require_once hinzukam. Also bei den beiden gab es wohl nie einen Unterschied in diesem Bezug

    Einen Kommentar schreiben:


  • Basti
    antwortet
    Schon seit über 5 Jahren, wenn ich nicht irre.

    Basti

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Aber daran ändert sich doch nichts, wenn man statt include_once require_once verwendet ...jedenfalls seit etlichen Versionen schon nicht mehr.

    Einen Kommentar schreiben:


  • axo
    antwortet
    Zitat von Saraneus
    Wen interessiert der Unterschied in PHP?
    solang du das projekt zu 100% testen kannst, niemanden.
    ich bin grad (seit einem jahr) an einem projekt mit 175.000+ codezeilen dran, und da kann ich dir sagen, dass es wichtig ist, garantieren zu können, das zumindest ein lint check funktioniert, bevor man etwas an den kunden ausliefert.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von axo
    das ist bereits zu spät. 'compile time' vs. 'runtime'.
    Mit welcher Version arbeitest Du?

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von axo
    Zitat von Saraneus
    Zitat von Basti
    Übrigends wäre require_once() include_once() hier vorzuziehen (denn deine Anwendung ist nicht lauffähig, wenn das Einbinden schief geht, also wäre ein Fatal Error angebacht)
    Der fatale Fehler kommt schon, wenn eine Klasse benutzt wird, die nie eingebunden wurde
    das ist bereits zu spät. 'compile time' vs. 'runtime'.
    Wen interessiert der Unterschied in PHP?

    Einen Kommentar schreiben:


  • axo
    antwortet
    Zitat von Saraneus
    Zitat von Basti
    Übrigends wäre require_once() include_once() hier vorzuziehen (denn deine Anwendung ist nicht lauffähig, wenn das Einbinden schief geht, also wäre ein Fatal Error angebacht)
    Der fatale Fehler kommt schon, wenn eine Klasse benutzt wird, die nie eingebunden wurde
    das ist bereits zu spät. 'compile time' vs. 'runtime'.

    Einen Kommentar schreiben:


  • robo47
    antwortet
    Zitat von DerDesian
    Naja, man kann einfach struckturierten Code verwenden.

    Die Strucktur kann eine 'index.php' haben:
    PHP-Code:
    <?php
    // -===== alle gebracuhten Klassen =====-
    include('./class/class.DB.php');
    include(
    './class/class.Account.php');
    include(
    './class/class.XYZ.php');
    // -===== alle gebracuhten Klassen | end =====-

    include('./logic.php');
    include(
    './layout.php');
    ?>
    dann wirst du nie solche Abfragen brauchen.

    Gruß
    Der Desian
    Sowas halte ich nciht für sinnvoll, hast du dir schonmal größere Klassen angeschaut ? nuSOAP in php4 ? das waren > 300 kb die nur in Klassen verpackt waren, sowas IMMER zu includen ... das schlägt massiv auf die performance, ist ja schon was wie wenn ich ne datenbank hab und präventiv ein SELECT * FROM allen tabellen mache :P

    mfg
    robo47

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Zitat von Basti
    Übrigends wäre require_once() include_once() hier vorzuziehen (denn deine Anwendung ist nicht lauffähig, wenn das Einbinden schief geht, also wäre ein Fatal Error angebacht)
    Der fatale Fehler kommt schon, wenn eine Klasse benutzt wird, die nie eingebunden wurde

    Einen Kommentar schreiben:

Lädt...
X