Problem mit Oop

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

  • Problem mit Oop

    Hallo, ich habe das problem, das der return in meiner Error Class nicht funktioniert. aber komischerweiße funktioniert die echo. An was könnte das liegen?

    PHP-Code:
    class ImageUpload extends ErrorClass {
       public function 
    checkImage () {


          if(
    exif_imagetype($_FILES['avatar']['tmp_dir']) != IMAGETYPE_JPEG) {
             return 
    $this->errormessage("Kein gültiges Format");
          }

       }

    }

    class 
    errorClass {
       function 
    errormessage($message) {
          
    $this->msg "Ungültiges Format";
          echo 
    "Variable MSG:".$this->msg."";

          return 
    $this->msg;


       }


  • #2
    Warum leitet ein Bildupload von einer Fehlerklasse ab? Das passt doch überhaupt nicht zusammen.

    Eine Ableitung bedeutet so viel wie "ist ein". Also ein Hund ist ein Tier. Ein Auto ist ein Fahrzeug. Aber ein Bildupload ist doch kein Fehler.

    Kommentar


    • #3
      Ich wollte eine Fehlerklasse schreiben, in der ich die Meldung "formatiere" und mit extends mit der jeweiligen Klasse verbinden, damit ich einfach nur z.b $this->errormessage() aufrufen brauch. War ich wohl falsch der annahme das man dies mit extends lösen kann?

      Kommentar


      • #4
        Zitat von Lord-Napoleon Beitrag anzeigen
        Ich wollte eine Fehlerklasse schreiben, in der ich die Meldung "formatiere" und mit extends mit der jeweiligen Klasse verbinden, damit ich einfach nur z.b $this->errormessage() aufrufen brauch. War ich wohl falsch der annahme das man dies mit extends lösen kann?
        Ja. Wenn du die Funktionalität von einer Klassen in einer anderen Klasse benötigst, ist dies keine Ableitung.

        PHP-Code:
        class ImageUpload {
            protected 
        $error;

            public function 
        __construct() {
                
        $this->error = new ErrorClass();
            }

            public function 
        doSomething() {
                
        $this->error->errorMessage('Something went wrong.');
            }

        Schöner wäre es natürlich mit Dependency Injection.

        Du solltest dir auch mal Exceptions ansehen. Eventuell macht das hier mehr Sinn.

        Kommentar


        • #5
          Danke, ich werds mal ausprobieren.

          Kommentar


          • #6
            [QUOTE=h3ll;647451]Ja. Wenn du die Funktionalität von einer Klassen in einer anderen Klasse benötigst, ist dies keine Ableitung.

            PHP-Code:
            class ImageUpload {
                protected 
            $error;

                public function 
            __construct() {
                    
            $this->error = new ErrorClass();
                }

                public function 
            doSomething() {
                    
            $this->error->errorMessage('Something went wrong.');
                }

            Ich hab es mal mit deinem Code ausprobiert. Das sah folgendermaßen aus:

            PHP-Code:
            class ImageUpload {
               protected 
            $error;
               public function 
            __construct() {
                  
            $this->error = new ErrorClass();
               }

               public function 
            checkImage () {
                  if(
            exif_imagetype($_FILES['avatar']['tmp_dir']) != IMAGETYPE_JPEG) {
                     
            $this->error->errorMessage('Kein gültiges Format');
                  }
               } 
            Auch hatte ich folgendes ausprobiert:

            PHP-Code:
            class ImageUpload {
               protected 
            $error;
               public function 
            __construct() {
                  
            $error = new ErrorClass();
               }

               public function 
            checkImage () {
                  if(
            exif_imagetype($_FILES['avatar']['tmp_dir']) != IMAGETYPE_JPEG) {
                     
            $error->errorMessage('Kein gültiges Format');
                  }
               } 
            Beides leider ohne Erfolg, das 2tere Hab ich aus deinem 1ten Link.
            Die echo aus der ErrorClass spuckt er jedesmal aus, nur nicht den return und ich finde mit einem echo ist es unsauber.

            Kommentar


            • #7
              Ich seh in dem Code kein return.

              Kommentar


              • #8
                Zitat von h3ll Beitrag anzeigen
                Ich seh in dem Code kein return.
                Ich war der annahme, der return in der errorclass(); reicht aus. Geht aber auch nicht mit.

                Was mir da grad noch einfällt.

                Wenn ich $this-> weglasse wie im 2ten Beispiel von mir bekomm ich:

                Code:
                Fatal error: Call to a member function errorMessage() on a non-object in /var/www/aion-screen/libs/upload.class.php on line 13
                aber es ist ja im konstruktor declariert mit $error = new ErrorClass();

                Kommentar


                • #9
                  aber es ist ja im konstruktor declariert mit $error = new ErrorClass();
                  Und verschwindet mit der folgenden } im Nirwana.

                  Was das $this-> bewirkt, ist dir doch klar, oder?
                  Zuletzt geändert von combie; 02.11.2010, 16:00.
                  Wir werden alle sterben

                  Kommentar


                  • #10
                    Mit $this hat man Zugriff auf eine Funktion innerhalb der Klasse und man kann Ihnen einen Wert zuweißen.

                    Kommentar


                    • #11
                      Mit $this hat man Zugriff auf eine Funktion innerhalb der Klasse
                      Nicht nur auf Funktionen, welche eigentlich Methoden heißen, sondern auch auf Eigenschaften, welche man auch als Objektvariablen bezeichnen könnte.

                      und man kann Ihnen einen Wert zuweißen.
                      Nein, man kann keinen Funktionen irgendwas zuweisen.
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        Zitat von Lord-Napoleon Beitrag anzeigen
                        … ich finde mit einem echo ist es unsauber.
                        Mit return wirds auch nicht besser.

                        Was soll das Class in ErrorClass?

                        Wozu überhaupt diese Klasse? Was ist anders als bei stdClass? Ach ja, du benutzt sie anders … du lässt den übergebenen String direkt wieder ausspucken, eine Instanz dieser Klasse brauchst du gar nicht.

                        Wozu soll ImageUpload Fehler in einer nach außen nicht sichtbaren Property sammeln? Entweder die Klasse kann auf den Fehler reagieren, dann braucht sie ihn nicht zu speichern, oder sie kann es nicht und gibt ihn direkt an den Aufrufer zurück. Ich würde es ja noch verstehen, wenn du erst alle Tests durchführen und Fehler sammeln würdest. Aber ErrorClass kann ja nur mit einem einzigen umgehen.


                        Lösche ErrorClass und alles was damit zusammenhängt und überlege erst mal was du im Fehlerfall genau machen willst. Was muss an den Aufrufer zurück gegeben werden und warum bzw. was soll er damit machen?
                        Willst du vielleicht im Fehlerfall ein Objekt erzeugen, dass die Fehlernachricht in sich trägt, und dieses Objekt an den Aufrufer zurück geben, so dass der Aufrufer anhand des Objekttyps erkennen kann, dass ein Fehler aufgetreten ist? Dann wirf eine Exception!
                        Zuletzt geändert von onemorenerd; 02.11.2010, 22:54.

                        Kommentar

                        Lädt...
                        X