Einzelnen Beitrag anzeigen

Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#17

AW: [PHP] Klassenstruktur für Adressdatenbank

  Alt 9. Feb 2012, 19:21
Ich habe gelesen, dass man den Konstruktor auf alle Fälle überschreiben und dort den Parent-Konstruktor aufrufen soll.
So'n Quatsch. Lass das mal. o0 (Oder mach's von mir aus ein Mal in der Vaterklasse, aber nicht jedes mal)

Btw, PHP-Klammer bei PHP-Code bitte weglassen, dann funktioniert das Highlighting.

PHP-Quellcode:
class DBEXception_QueryFailed extends DBException
{}
Und nochmal btw, du brauchst nach der PHP-Klammer nicht einrücken. Damit sparst du wertvollen Platz nach rechts. Und das Einrücken nach der Klammer ist wirklich sinnlos. (Du rückst in Delphi ja auch nicht nach program oder unit ein. (Oder wie auch immer das da oben heißt^^)

Ich denke mal, so hast du dir das vorgestellt.
Perfekt.

Und hier mal eine einfache und ungetestete Implementation der Registry:

PHP-Quellcode:
// Registry.php

final class Registry
{
 
    private static $instance = NULL;
    private $data = array();

    private function __construct() {}
    private function __clone() {}
 
    public static function getInstance() {
 
        if (NULL === self::$instance) {
            self::$instance = new self;
        }
        return self::$instance;
    }

    public function get($id)
    {
        return $this->data[$id];
    }

    public function __get($id)
    {
        return $this->get($id);
    }

    public function set($id, $value)
    {
        $this->data[$id] = $value;
    }

    public function __set($id, $value)
    {
        return $this->set($id, $value);
    }

    // TODO throw exception on missing index
    // TODO unset, __unset, isset, __isset

}
 
// Bootloader.php

abstract class Bootloader
{

    private static function connect_mysql()
    {

        $registry = Registry::getInstance();
        $registry->db = new mysqli('127.0.0.1', '', '', 'mysql');

        if (mysqli_connect_error()) {
            die('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error());
        }

        printf("Connected to %s\n", $registry->db->host_info);
    }

    public static function boot()
    {
        register_shutdown_function("Bootloader::shutdown");
        self::connect_mysql();
    }

    public static function shutdown()
    {
        Registry::getInstance()->db->close();
        printf("Connection closed.\n");
    }

}

// index.php

Bootloader::boot();

// IrgendeinModel.php

class Model
{

    public function __construct()
    {
        $this->db = Registry::getInstance()->get('db');
        echo $this->db->query('SELECT NOW() AS `now`')->fetch_object()->now . "\n";
    }

}

new Model();
Liebe Grüße,
Valentin
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog

Geändert von Valle ( 9. Feb 2012 um 19:25 Uhr)
  Mit Zitat antworten Zitat