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.

  • Paul.Schramenko
    antwortet
    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

    Einen Kommentar schreiben:


  • nuna
    antwortet
    wie "gar nicht"?

    Catchable fatal error: ...

    Einen Kommentar schreiben:


  • Paul.Schramenko
    antwortet
    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

    Einen Kommentar schreiben:


  • nuna
    antwortet
    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);

    Einen Kommentar schreiben:


  • nikosch
    antwortet
    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.

    Einen Kommentar schreiben:

Lädt...
X