new Class() funktioniert auf Apache nicht...



  • Hey!
    Hab das neueste XAMPP package. Leider funktioniert Folgendes nicht:

    scripts/blackboard/blackboard.php:

    <?php
    class Blackboard
    {
    	function Blackboard()
    	{
    		echo "created";
        }
    }
    ?>
    

    content/english/home/blackboard.php:

    <?php
    include("../../../scripts/blackboard/blackboard.php");
    
    echo "1";
    $blackboard = new Blackboard();
    echo "2";
    ?>
    

    Ausgabe ist: 1
    Und der Rest der Seite wird nicht mehr angezeigt... Wenn ich die new-Anweisung weglasse, passt alles... Ausgabe 12 und der Rest der Seite wird auch angezeigt.

    Warum?
    Wenn es nicht auf zwei files aufgeteilt ist, funktioniert es aber!

    <?php
    class Blackboard
    {
    	function Blackboard()
    	{
    		echo "created";
        }
    }
    
    echo "1";
    $blackboard = new Blackboard();
    echo "2";
    ?>
    

    Ausgabe: 1created2

    Was ist da nur los? Keinerlei Fehlermeldungen, der include-Pfad stimmt auch 100% (Arbeite mit phpeclipse).

    Danke!
    MfG



  • Ach ich Depp, content/english/home/blackboard.php wird ja von index.php inkludiert, somit muss ich den include-Pfad relativ zu eben dieser angeben.

    Wie oft will mir das noch passieren...
    Thema erledigt...



  • kleiner tip: in der php.ini folgendes einstellen:
    error_reporting = E_ALL
    display_errors = On

    dann werden alle fehler ausgegeben, und solche fehler fallen dann sofort auf.



  • Außerdem: Das Konstrumt require dem Konstrukt include vorziehen!

    require bricht die Skriptausführung bei einem Zugriffsfehler auf die einzubindende Datei ab, während include sie fortsetzt. Ich frage mich ernsthaft, welcher Spezialist im PHP-Entwicklerteam die gloreiche Idee hatte, wenn eine einzubindene Datei nicht vorhanden ist, könne es schlau sein, das Skript einfach weiter laufen zu lassen, als wäre nichts gewesen 🙄



  • include hat durchaus seinen Sinn. Du darfst nicht nur davon ausgehen, dass man Klassen oder Funktionen einbinden will. Bei Inhalten kann include eben sinnvoller sein, je nach Anwendungsfall.



  • So einen Fall hatte ich nur interessanterweise bisher nur sehr selten in meiner Webdesign-Geschichte. 😉
    Entweder, die Inhalte sind essentiell; dann breche ich die Skriptausführung ab (file_exists()). Oder aber, es kommt wirklich auf Inhalt an; dann schiebe ich aber auch ein file_exists() davor und werfe eine Exception.

    Der einzige Sinn, der sich mir erschließt, ist der, dass include() den vom eingebundenen Skript gelieferten Rückgabewert als Funktionswert liefert. Das braucht man aber auch erfahrungsgemäß eher selten, bzw. lässt es sich ohne Probleme anderweitig lösen.

    Fazit: Meiner Meinung nach ein nettes Feature, dass aber öfter Ärger macht als dass es nützt. Wie so vieles in PHP (safemode, register_globals, magic_quotes ...).
    Aber wer sich über seine Vor- und Nachteile im Klaren ist - Klar, schaden tut es dann nicht 😉


Anmelden zum Antworten