Ankündigung

Einklappen
Keine Ankündigung bisher.

Fehlerbehandlung beim Type Hinting in Kombination mit method chaining

Einklappen

Neue Werbung 2019

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

  • Fehlerbehandlung beim Type Hinting in Kombination mit method chaining

    PHP-Code:
    $reg->database->select('id, username, email')
                  ->
    fromTable('user')
                  ->
    where('email''gott@himmel.de')
                  ->
    execute()
                  ->
    fetch(); 
    Mir geht es also nun um die Fehlerbehandlung bei dieser Funktion
    PHP-Code:
    public function fetch(PDOStatement $statement)
    {
        return 
    $statement->fetch(PDO::FETCH_ASSOC);

    Wie gehe ich also nun vor bei der Fehlerbehandlung, wenn z. B. beim Aufruf von fetch() als Parameter [rein theoretisch] fälschlicherweise ein String übergeben wird, so dass mir bei dem obigen Method Chaining eine Exception die ganze Seite krachen lässt? Und warum kann ich bei der obigen Kette ->fetch() aufrufen ohne ein Argument zu übergeben? Es hat doch einen Parameter.

  • #2
    Das ist - Quark. Chaining nutzt ja gerade das Prinzip, dass die gemeinsamen „Ressourcen“ im Objekt verortet sind. Heißt, dass $statement als Property ins Objekt gehört und nicht als Parameter übergeben.
    [COLOR="#F5F5FF"]--[/COLOR]
    [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
    [COLOR="#F5F5FF"]
    --[/COLOR]

    Kommentar


    • #3
      Das ist - Quark.
      Mag ja sein. Das beantwortet mir trotzdem nicht die Frage, wie ich Fehlerbehandlung bei TypeHinting umsetze.

      PHP-Code:
      public function __construct(MyDB $db) {
          
          
      $this->db $db;

      Wie gehe ich also vor, sollte $db z.B. NULL sein?

      Edit: Soll die Fehlerbehandlung etwa vor dem Aufruf des Konstruktors stattfinden?

      PHP-Code:
      if(!$db) {
          die(
      'Adieu');
      }
      else {
          new 
      MyClass($db);

      Kommentar


      • #4
        Gar nicht, das ist ja der Witz da dran, probier mal ein anderes Object zu übergeben und staune was passiert.

        PHP-Code:
        <?php
        error_reporting
        (-1);

        class 
        A
        {}

        class 
        B
        {}

        class 
        C
        {
            protected 
        $_class;
            public function 
        __construct(B $a)
            {
                
        $this->_class $a;
            }
        }

        $a = new A();
        $c = new C($a);
        Code:
        Catchable fatal error:  Argument 1 passed to C::__construct()  must be an instance of B, instance of A given, called in  D:\xampp\htdocs\index.php on line 20 and defined in D:\xampp\htdocs\index.php  on line 13
        "My software never has bugs, it just develops random features."
        "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

        Kommentar


        • #5
          wie "gar nicht"?

          Catchable fatal error: ...

          Kommentar


          • #6
            Rein theoretisch brauchste des gar net zu machen, weil immer gewährleistet sein sollte was rein kommt! Wenn etwas falsches reinkommt läuft irgendwas in deinem Programm gehörig schief!

            Aber wenn dus umbedingt abfangen willst kannste auch nen eigenen error_handler setzen:

            PHP-Code:
            <?php
            error_reporting
            (-1);

            function 
            myErrorHandler($errorCode$errorMessage$errorFile$errorLine) {
                switch(
            $errorCode) {
                    case 
            E_ERROR:
                    die(
            'fatal error!');
                    break;
                    
                case 
            E_CORE_ERROR:
                    die(
            'E_CORE_ERROR');
                    break;
                    
                case 
            E_RECOVERABLE_ERROR:
                    die(
            'E_RECOVERABLE_ERROR');
                    break;
                  
                default:
                    die(
            'mir doch egal');
                    break;
                }
            }  
            set_error_handler('myErrorHandler');


            class 
            A
            {}

            class 
            B
            {}

            class 
            C
            {
                protected 
            $_class;
                public function 
            __construct(B $class)
                {
                    
            $this->_class $class;
                }
            }

            $a = new A();
            $c = new C($a);
            Ausgabe:
            Code:
            E_RECOVERABLE_ERROR
            Die einzelnen Fehlercodes kannste hier nachlesen:
            PHP: Vordefinierte Konstanten - Manual
            "My software never has bugs, it just develops random features."
            "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

            Kommentar

            Lädt...
            X