OOP: Performance-Frage

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

  • #16
    PHP-Code:
    spl_autoload_register('__autoload'); 

    Kommentar


    • #17
      Hm ... die Autoload Funktion ist ja bereits im Stack. Zumindest wird die __autoload() Funktion vor meiner SPL Autoload Funktion gestartet. Ich habe es jetzt so gelöst:
      PHP-Code:
      <?php
      class LibAutoload
      {
            public static function 
      autoload($className)
            {    
              
      $dirname  dirname(__FILE__);
              
      $fileName str_replace('|'DIRECTORY_SEPARATORpreg_replace('/(?!^)[[:upper:]]/''|\0'$className));
              
      $file     $dirname DIRECTORY_SEPARATOR $fileName '.class.php';
              if (
      is_readable($file)) 
                  require 
      $file;
            }

            public static function 
      register()
            {
                
      $funcs spl_autoload_functions();
                if (
      in_array('__autoload'$funcs)) {
                    require(
      ABSPATH 'plugins/MMNCalendar/lib/Autoload.class.php');
                    
      spl_autoload_register(array('Autoload''rewriteAutoload'));
                    
      spl_autoload_unregister('__autoload');
                }
              
      spl_autoload_register(array(__class__'autoload'));
            }
      }
      ?>
      Sieht komisch aus, klappt aber. Dein Beispiel
      PHP-Code:
      spl_autoload_register('__autoload'); 
      tat's irgendwie nicht.
      MM Newmedia | MeinBlog

      Kommentar


      • #18
        Ahh, dann habe ich dich falsch verstanden. Ich habe jetzt angenommen, die __autoload-Funktion ist noch nicht registriert und du willst dies tun. Das Gegenteil ist aber offensichtlich der Fall. Aber du hast die Lösung ja schon gefunden.

        Kommentar


        • #19
          Ich halte nicht viel von dem Hickhack in der Register Methode!
          Ist es nicht einfacher die vorgefertigte __autoload() umzubenennen?

          z.B. in Softwarepaket_autoload()
          Und dann per SPL registrieren.

          Man könnte dem Ersteller der Scripte das auch freundlich mitteilen, in welche Falle man getappt ist. Evtl. schwenkt er er ja auch auf SPL um.
          Wir werden alle sterben

          Kommentar


          • #20
            Original geschrieben von combie Man könnte dem Ersteller der Scripte das auch freundlich mitteilen, in welche Falle man getappt ist. Evtl. schwenkt er er ja auch auf SPL um. [/B]
            Ist bereits geschehen und der Hersteller der Software nutzt nun auch die SPL Funktionen bereits im nächsten Upgrade der Software. Der Vorteil liegt ja auch ganz klar auf der Hand.

            Die __autoload() Funktion einfach umbenennen, wenn sie bereits im Stack ist? Hm ... stelle ich mir schwierig vor. Hat sich aber auch für diesen speziellen Fall erledigt.
            MM Newmedia | MeinBlog

            Kommentar


            • #21
              Die __autoload() Funktion einfach umbenennen, wenn sie bereits im Stack ist? Hm ... stelle ich mir schwierig vor.
              Nee... nicht im Stack....
              Sondern im Quellcode!
              Dann landet sie gar nicht mehr im Stack

              Nur weil sie den Namen __autoload() trägt landet sie automatisch im Autoloader Stack. Es ist eine "magische" Funktion.

              Irgendwo im "fremd" Code findet sich:
              PHP-Code:
              function __autoload($klasse)
              {
              // tuwas


              Ersetzen durch:
              PHP-Code:
              function fremde__autoload($klasse)
              {
              // tuwas
              }
              spl_autoload_register('fremde__autoload'); 
              Und Zack sollte sich das Problem erledigt haben!
              Ganz ohne deinen eigenen Autoloader zu vergewaltigen.
              Weil dein jetziger Autoloader (der mit dem Hack) widerspricht dem "Prinzip der geringsten Verwunderung"
              Wir werden alle sterben

              Kommentar


              • #22
                Ja na klar ... das ging nur leider nicht, da der "Fremdcode" mit IonCube verschlüsselt ist.

                Aber grundsätzlich ist Dein Weg schon richtiger als meiner.
                MM Newmedia | MeinBlog

                Kommentar


                • #23
                  Ich benutze übrigen mitlerweile einfach den Zend_Loader aus dem Zend-Framework und benenne meine Klassen entsprechend der Konvention, und alles funktioniert wunderbarstens.
                  Mein aktuelles Projekt: Hausaufgaben Datenbank für kostenlose Hausaufgaben

                  Kommentar

                  Lädt...
                  X