Ankündigung

Einklappen
Keine Ankündigung bisher.

Nerviges PHP-Verhalten bei extends unter MacBook XAMPP 7.1.1.0

Einklappen

Neue Werbung 2019

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

  • Nerviges PHP-Verhalten bei extends unter MacBook XAMPP 7.1.1.0

    Hi Leute,

    ich habe XAMPP 7.1.1.0 unter Mac laufen.
    Leider habe ich heute einen Fehler festgestellt, der mich innerlich blockiert, d.h. entmutigt noch weiter zu machen.

    Im konkreten habe ich angefangen erste Schritte zu starten indem ich komplett nurnoch OOP anwenden möchte, doch schon bei der einfachsten Vererbung passiert ungewolltes Verhalten.

    Beispiel:
    PHP-Code:
    class login extends tpl {


        private 
    $tplSrc DIR_TPL DS "tpl_login.html";

        public function 
    __construct(){

        
    # login Tepmplate
            
    $this -> loadTpl$this -> tplSrc );


        }

    hier hatte ich zwischendurch mal eine Testausgabe echo "login"; im constructor gehabt. Danach habe ich die Ausgabe wieder entfernt, aber es kam im Browser, egal wie ich ihr aktualisiert hatte immer die Ausgabe.
    Ich hab alles abgesucht und nirgends Fehler gefunden.
    Ich habe XAMPP komplett neu gestartet, Browser neu gestartet, gleiches Ergebnis : wieder die Ausgabe "login"
    Ich habe das Macbook neu gestartet / Gebootet und alles andere, wieder das gleiche.
    Nach ca.3h Internetrecherche ohne jeden Erfolg habe ich angefangen die Beziehungen aufzulösen, also so lange die Vererbung oder Instanzierung abzubrechen bis die Ausgabe weg war. Als ich extends entfernte und die Ausgabe absichtlich zum Fehler führte, danach wieder extends einfügte, war diese Ausgabe wie aus dem nichts verschwunden.

    Irgendwas stimmt hier mit der Speicherverwaltung nicht. Gibt es Einstellungen in PHP, Buffer, Cach ect. der hier irgendwas behindern könnte?
    Meine Projektarbeit hängt leider davon ab. Denn wenn ich nicht mehr die Fehler durch Debugging rausfinde wird das bei umfassenderen Code echt zum Alptraum.


    bitcoin.de <- Meine Freelancerwährung

  • #2
    Hast du auch den Browsercache geleert bzw. deaktiviert?
    [URL="https://github.com/chrisandchris"]GitHub.com - ChrisAndChris[/URL] - [URL="https://github.com/chrisandchris/symfony-rowmapper"]RowMapper und QueryBuilder für MySQL-Datenbanken[/URL]

    Kommentar


    • #3
      Irgendwie kommt mir der Post unvollständig vor - zumindest kann man nicht direkt sagen, was das Problem ist (irgendeine echo-Ausgabe die nach viel hin- und her verschwunden ist).
      Es fehlt Code, das Fragment ist nicht alleine lauffähig - wo ist der Rest (Basisklasse)?
      Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

      Kommentar


      • #4
        , der mich innerlich blockiert, d.h. entmutigt noch weiter zu machen.
        Ev. gar nicht schlecht, weil:

        PHP-Code:
        class login extends tpl 
        Das sieht nach einem Designfehler aus. Vererbung ist eine "ist ein(e)" Verhältnis. Mann ist ein Mensch, Audi ist ein Auto. Aber ein login ist kein Template. Du scheinst auf dem falschem Weg zu sein. Unabhängig vom Topic.

        Mach damit mal nicht weiter und erkläre uns zuerst mal was das ist.
        The string "()()" is not palindrom but the String "())(" is.

        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
        PHP.de Wissenssammlung | Kein Support per PN

        Kommentar


        • #5
          Zitat von Alpha Beitrag anzeigen
          indem ich komplett nurnoch OOP anwenden möchte
          Und dafür ziehst du dir Abhängigkeiten von externen Konstanten ( DIR_TPL , DS ) und Dateien (tpl_login.html) in deine Klassen rein?
          Da geht das was du unter OOP verstehst m.E. nach hinten los, mal abgesehen von dem was hausl schon angemerkt hat.

          Dann noch: Debuggen mit echo ist Murx

          Kommentar


          • #6
            Hallo,

            grundlegende OO Kenntnisse sind Dir geläufig? Wenn Du in einer Kindsklasse eine Methode (in Deinem Fall der Konstruktor) überschreibst, und NICHT parent:: aufrufst, dann wird die Methode komplett durch die Kindsklasse überschrieben, bzw. ersetzt. Folgendes Beispiel zur Erörterung der Problematik:
            PHP-Code:
              <?php class BaseClass {     public function outputSth()     {         echo 'Hallo BaseClass' PHP_EOL;     } }  class ChildClassA extends BaseClass {     public function outputSth()     {         echo 'Hallo ChildClassA' PHP_EOL;     } }  class ChildClassB extends BaseClass {     public function outputSth()     {         parent::outputSth();         echo 'Hallo ChildClassB' PHP_EOL;     } }  $baseObj = new BaseClass(); $baseObj->outputSth();  $childA = new ChildClassA(); $childA->outputSth();  $childB = new ChildClassB(); $childB->outputSth();
            Ergibt folgende Ausgabe:
            Code:
            Hallo BaseClass
            Hallo ChildClassA
            Hallo BaseClass
            Hallo ChildClassB
            Als weitere Spielerei wäre da noch der Down- bzw. Upcast zu erwähnen. Das lassen wir aber mal für heute weg, würde zu weit führen.

            Falls es wirklich ein Caching Problem ist, was ich stark bezweifle, dann lässt sich das am ehesten durch Deine php.ini heraus finden. Poste die doch mal!

            Außerdem: Schmeiß XAMPP weg, Du hast auf Mac einen bereits vorinstallierten Apache Webserver mit PHP. Benutze doch einfach das. Falls Dir die Mac ausgelieferte PHP Version zu alt ist, dann mach's doch einfach mit Homebrew. Einfacher gehts doch kaum, oder?! Falls Du Geld ausgeben willst, was sich aber für einen Studenten nicht rechnen wird, dann kannst Du Dir auch mal MAMP kaufen. Das ist die bequemste LAMP Stack Lösung für Mac, schön mit Klickibunti, ähnlich wie der IIS Manager unter Windows.

            Und bitte: Formatiere Deinen Code anständig. Gerade wenn man PHP lernen will, bzw. seinen Fortschritt anderen Studenten oder Dozenten zeigen will, dann empfiehlt sich das wärmstens! Deine Zuhörer wollen bei der Präsentation nicht noch gleichzeitig umdenken müssen auf eine ihnen fremde Code Formatierung. Formatiere also Deinen Code am besten nach den PSR Standards bzw. nach den Symfony Coding Standards.


            MFG

            derwunner

            Kommentar


            • #7
              Zitat von derwunner Beitrag anzeigen
              Und bitte: Formatiere Deinen Code anständig.
              Hm.. dein Code ist in einer Zeile :P

              apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

              Kommentar


              • #8
                Ich werd mal die Vererbung weglassen. Hab nach kurzem Überlegen gesehen, dass die TPL eigentlich nur ein spezieller Datentyp object ist, wenn ich daraus instanziere.
                Bin mir selber nicht schlüssig wie ich das jetzt weiter führe.

                "Kindsklasse" hab ich auch noch nie gehört. Ist das ein Teil der Kindklasse? *kleiner Spaß am Rande*
                Den Einzeilenquellcode kann ich leider nicht lesen und wüsst auch garnicht was der mit meinem Problem machen soll.

                Das es auf dem Macbook einen Webserver gibt hab ich schon zum 2. mal gehört, aber da sich dieses Teil nicht so offensichtlich zeigt und ich den Mac eher als bequemes Desktop-Arbeitsgerät statt als Commandozeilen-Forensikstation betrieben hab, ist mir das auch nicht ins Auge gesprungen, was diesen Umstand untermauert hätte.

                Ich werde mal die Designfehler im Code beheben und das Verhalten weiter beobachten. evt. hat es sich bis dato erledigt.

                Ich studiere übrigens nicht, leider. Ich hatte im Zuge meiner Anwendungsentwickler-Ausbildung 4x5 Tage PHP und ansonsten nur Hobbywissen von 1999 bis heute mit vielen Unterbrechungen dazwischen.
                bitcoin.de <- Meine Freelancerwährung

                Kommentar


                • #9
                  Zitat von jspit Beitrag anzeigen
                  Ich weis. Das echo sollte nur mal eine Ausgabe liefern. Da stand kein Datentyp drin.
                  bitcoin.de <- Meine Freelancerwährung

                  Kommentar


                  • #10
                    Zitat von BlackScorp Beitrag anzeigen
                    Hm.. dein Code ist in einer Zeile :P
                    Ja, das ist ein Forum-Software-Bug. Immer wenn ich das unter Mac aus meiner IDE raus kopiere, dann erkennt das Forum hier \r nicht als Zeilenumbruch. Ich muss dann im Beitrags-Textfeld die ganzen Zeilenumbrüche händisch löschen und neu einfügen. Sorry, dass ich dazu nicht immer Lust habe...

                    Kommentar


                    • #11
                      Zitat von derwunner Beitrag anzeigen
                      Ich muss dann im Beitrags-Textfeld die ganzen Zeilenumbrüche händisch löschen und neu einfügen. .
                      STRG+SHIFT+Einfügen oder oben links das "T"-Symbol ("als Klartext einfügen") sollte es auch tun.
                      The string "()()" is not palindrom but the String "())(" is.

                      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                      PHP.de Wissenssammlung | Kein Support per PN

                      Kommentar


                      • #12
                        Zitat von derwunner Beitrag anzeigen
                        Ja, das ist ein Forum-Software-Bug. Immer wenn ich das unter Mac aus meiner IDE raus kopiere, dann erkennt das Forum hier \r nicht als Zeilenumbruch. Ich muss dann im Beitrags-Textfeld die ganzen Zeilenumbrüche händisch löschen und neu einfügen. Sorry, dass ich dazu nicht immer Lust habe...
                        Nimms nicht so ernst, ich ärgere dich doch nur
                        apt-get install npm -> npm install -g bower -> bower install <package> YOLO [URL]https://www.paypal.me/BlackScorp[/URL] | Mein Youtube PHP Kanal: [url]https://www.youtube.com/c/VitalijMik[/url]

                        Kommentar


                        • #13
                          Zitat von hausl Beitrag anzeigen
                          Das sieht nach einem Designfehler aus. Vererbung ist eine "ist ein(e)" Verhältnis. Mann ist ein Mensch, Audi ist ein Auto. Aber ein login ist kein Template..
                          Ich glaube er hat Die Klasse einfach nur falsch benannt. LoginTemplate o.ä. wär hier wohl das was er meint (oder alpha?) Also zumindest aus dem bischen Logik würde ich das so ableiten.

                          Alpha Kurzer Hinweis was Du auch verbessern kannst: Klassen werden in PHP immer so benannt das sie mit einem Großbuchstaben anfangen alles nachfolgende dann camelCase. (nennt sich glaube PascalCase) Kannst Du bei allen zu PHP selbst gehörenden Klassen so beobachten und bei allen größeren Libs und fast allen composer-Packeten auch.

                          Kommentar


                          • #14
                            Zitat von derwunner Beitrag anzeigen
                            Ja, das ist ein Forum-Software-Bug. Immer wenn ich das unter Mac aus meiner IDE raus kopiere, dann erkennt das Forum hier \r nicht als Zeilenumbruch.
                            \r wurde als Zeilenumbruch auch nur noch MacOS bis Version 10 verwendet. Du solltest mal besser auf \n umstellen.

                            Kommentar

                            Lädt...
                            X