Hallo!

Ik was weer aan het experimenteren met OOP maar ik stuiterde op een vraag waar ik niet uit kwam en het niet precies op Google kon vinden..


class Database {
  protected $_hostname = 'localhost';
  protected $_username = 'root';
  protected $_password = '';
  protected $_database = 'rob';


  public function connect() {
    $connection = mysqli_connect($this->_hostname, $this->_username, $this->_password, $this->_database);

    if(!$connection) {
      printf('Error met verbinding');
      exit();
    }
  }
}

class User extends Database {
  public $test = 'test';

  public function __construct() {
    $database = new Database;
    $database->connect()->real_escape_string($test);
  }
}

$database = new Database();
$database->connect();

$user = new User;


Hoe kan ik in de User class de variable $connection aanroepen voor bv. real escape string toe te passen?
Of zou ik hier in de Database class functions voor moeten aan maken of dergelijk?

[size=xsmall]Toevoeging op 14/02/2017 17:59:08:[/size]

UPDATE CODE:


class Database {
  protected $_hostname = 'localhost';
  protected $_username = 'root';
  protected $_password = '';
  protected $_database = 'rob';

  public $connection;

  public function connect() {
    $this->connection = mysqli_connect($this->_hostname, $this->_username, $this->_password, $this->_database);

    if(!$this->connection) {
      printf('Error met verbinding');
      exit();
    }
  }
}

class User extends Database {
  public $test = 'test';

  public function __construct() {
    $database = new Database;
    $con = $database->connection;
    $con->real_escape_string($test);
  }
}


error bij de code is:
Fatal error: Uncaught Error: Call to a member function real_escape_string() on null in C:\xampp\htdocs\index.php:28 Stack trace: #0 C:\xampp\htdocs\index.php(35): User->__construct() #1 {main} thrown in C:\xampp\htdocs\index.php on line 28
Alternatief: een referentie van het database-object rechtstreeks meegeven bij de constructie van een user-object (als het gaat om de "huidige gebruiker", zie hieronder)?

Het hangt ook af wat je verstaat onder (een object van of objecten van) de User class: vertegenwoordigt een object van de User class de huidige (ingelogde) gebruiker van een systeem of een generiek object die een willekeurige (en niet zozeer de huidige) gebruiker uit het systeem representeert waar je bewerkingen op uit kunt voeren. In dit laatste geval is de aanpak met een Mapper weer geschikter.

Oftewel: @Rob, waar wil jij een User (object) voor gebruiken? Of wat voor idee steekt er achter jouw User class?
Thomas van den Heuvel op 16/02/2017 10:57:10

Alternatief: een referentie van het database-object rechtstreeks meegeven bij de constructie van een user-object (als het gaat om de "huidige gebruiker", zie hieronder)?

Ik heb er zelf nog wat lagen tussen zitten:

• class Connection extends PDO
• abstract class AbstractModel uses Connection
• abstract class AbstractDAO extends AbstractModel
• class UserMapper extends AbstractDAO
• class User

Het Data Access Object (DAO) kan de vier standaardqueries uitvoeren: INSERT, SELECT, UPDATE en DELETE. Zo kun je er met efficiënt weinig extra code zo veel mappers aan hangen als je wilt.

Reageren