OOP - Fehler bei PDO

  • Hey!


    Ich habe gerade mal eine Grundstruktur mit OOP probiert, allerdings habe ich ein paar Fragen:


    1. Ich bekomme hierbei den Fehler

    Fatal error: Uncaught Error: Call to a member function prepare() on null in C:\xampp\htdocs\class\User.php:10 Stack trace: #0 C:\xampp\htdocs\index.php(5): User->getUser() #1 {main} thrown in C:\xampp\htdocs\class\User.php on line 10


    Allerdings weiß ich aber nicht, wie ich das beheben soll. Soll ich die connection in einer globalen Variable definieren?


    2. Soll das bei idealer objektorientierer Programmierung bei jedem Statement gemacht werden? Soll praktisch im Idealfall kein SQL-Statement mehr direkt im Code stehen, sondern nur in Klassen bzw. Funktionen?


    Danke schon mal! :)

    PHP: index.php
    <?php
    require 'class/Database.php';
    require 'class/User.php';
    $user = new User();
    echo $user->getUser();
    ?>
  • Code
    $connect = new Database();
    $conn = $connect->connection();
    $user = new User();
    $user->getUser($conn);


    Das kann ich dann ja so machen, richtig? Dann muss ja die die Funktion public sein.

  • Im besten Fall regelt man das über einen "DI" (dependency injection|injector).

    Aber das ist evtl. für den Anfang etwas zu viel.


    Du kannst die Abhängigkeit (dependency) in auf den User setzen:

    Beim User laden sollest Du nicht getUser nutzen.

    Sondern: find() findById() findFirst() delete() ...

    Bsp:

  • Wie sieht dann die Database Klasse aus? So?


  • Nein.

    \PDO ist ja eine Klasse von PHP.

    Die hat ja eigtl schon einen __construct.

    Den hättest Du jetzt überschrieben.

    Könnte man machen, aber muss eigtl nicht sein.


    Statt Database könntest Du gleich die \PDO Klasse nutzen.

    Und da das Object ja nun "nur" von \PDO stammt, und eine Connection ist,

    könntest Du den getter und setter (nennt man so, weil getSoUndSo() , setSoUndSo() )

    getConnection()

    und

    setConnection()

    nennen.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!