Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PDO singleton

Einklappen

Neue Werbung 2019

Einklappen
Dieses Thema ist geschlossen.
X
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • coolio
    hat ein Thema erstellt [Erledigt] PDO singleton.

    [Erledigt] PDO singleton

    Hiho, hänge grade an meiner PDO Klasse, die was in die Datenbank einfügen soll. Iwie klappt das net. Seht ihr den Fehler. Hier mein Code:

    PHP-Code:
    class Database
    {
        private 
    $_db;
        static 
    $_instance;

        private function 
    __construct(){
            
    $this->_db = new PDO('mysql:host=localhost;dbname=test''root''');
        }

        public static function 
    getInstance() {
            if (!(
    self::$_instance instanceof self)) {
                
    self::$_instance = new self();
            }
            return 
    self::$_instance;
        }

    }
    //Anwendung
    $queryNewUserInsert Database::getInstance()->prepare('INSERT INTO users (firstName, lastName) VALUES(`Max`, `Mustermann`)');
    $queryNewUserInsert->execute(); 

  • nikosch
    antwortet
    [MOD: Heimlich abschließ...]

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Nachteil 1: Es können nicht mehrere Datebanken genutzt werden.
    Nachteil 2: Das was coolio beim Singleton hard gecoded hat, wird jetzt in anderer Form genauso wieder hard gecoded, da hilft auch kein static Aufruf.

    Einen Kommentar schreiben:


  • tr0y
    antwortet
    Kann mal jemand diesen zweitklassigen Superheldenverschnitt weg bannen ?

    Du hast die soziale Kompetenz einer abstürzenden Schmeißfliege, der ist auch alles egal. Aber für sowas ist hier denke ich kein Platz.

    Einen Kommentar schreiben:


  • lottikarotti
    antwortet
    Hallöchen,

    Zitat von batman147 Beitrag anzeigen
    Ich wunder mich nur, weil das was er sich jetzt zusammengeschustert hat, ist grundfalsch. Und das weiss er wahrscheinlich nicht mal -.-
    Hast du Einblick in seinen Code? Und was gibt dir das Recht hier einfach Leute zu beleidigen? Das ist weder konstruktiv noch ein gelungener Start hier im Forum. Gerne darfst du uns darüber aufklären, was denn so alles "grundfalsch" ist, denn offensichtlich weißt du es ja besser.

    Viele Grüße,
    lotti

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Ich wunder mich nur, weil das was er sich jetzt zusammengeschustert hat, ist grundfalsch. Und das weiss er wahrscheinlich nicht mal -.-

    Einen Kommentar schreiben:


  • lottikarotti
    antwortet
    Diese Fluktuation hier im Forum..

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Ach leck mich doch, kein Bock auf sowas.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Coolio was bist du für eine Pfeiffe. Du hast 0 OOp-kenntnisse und diskutierst auf Niveau, das du sicher nicht hast. Gibts nicht ein andres Hobby für dich als intelligent sein vorspielen zu müssen.

    Einen Kommentar schreiben:


  • tr0y
    antwortet
    Zitat von coolio Beitrag anzeigen
    Danke dir, mein Freund. Bald dürfte deine Wunschliste auf Amazon kleiner werden
    Da freut sich tr0y.

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Danke dir, mein Freund. Bald dürfte deine Wunschliste auf Amazon kleiner werden

    Einen Kommentar schreiben:


  • tr0y
    antwortet
    Okay, dann noch was damit du dich nicht vertippst beim array key:

    PHP-Code:
    <?php
    class Database{

        const 
    CONTAINER_FIELD 'database';

        private static 
    $container;

        public static function 
    __callStatic($method, array $arguments){
            if(!
    self::$container instanceof ArrayObject){
                throw new 
    RuntimeException('Static Facade is not connected to a container');
            }

            if(!
    self::$container->offsetExists(self::CONTAINER_FIELD)){
                throw new 
    RuntimeException('Connected container has not Database Object');
            }

            if (!
    self::$container->offsetGet(self::CONTAINER_FIELD) instanceof PDO){
                throw new 
    RuntimeException('Connected container serves a incompatible database object');
            }

            return 
    call_user_func_array(
                array(
                    
    self::$container->offsetGet(self::CONTAINER_FIELD),
                    
    $method
                
    ),
                
    $arguments
            
    );
        }

        public static function 
    connectContainer(ArrayObject $container){
            
    self::$container $container;
        }

    }

    $container = new ArrayObject();
    $container[Database::CONTAINER_FIELD] = new PDO('mysql:host=localhost;dbname=test''root''');

    Database::connectContainer($container);

    Einen Kommentar schreiben:


  • monolith
    antwortet
    Zitat von coolio Beitrag anzeigen
    Und das [static facade] bringt mir? (ausser minimale Codereduktion)
    Ich finde das viel schöner! Bei Symfony ging mir das immer auf die Nerven, mir stets die Instanzen von allem erst mal holen zu müssen. DRY ist das nicht!

    Einen Kommentar schreiben:


  • Gast-Avatar
    Ein Gast antwortete
    Datei container.php
    PHP-Code:
    <?php
    class Database{

        private static 
    $container;

        public static function 
    __callStatic($method, array $arguments){
            if(!
    self::$container instanceof ArrayObject){
                throw new 
    RuntimeException('Static Facade is not connected to a container');
            }

            if(!
    self::$container->offsetExists('database')){
                throw new 
    RuntimeException('Connected container has not Database Object');
            }

            if (!
    self::$container->offsetGet('database') instanceof PDO){
                throw new 
    RuntimeException('Connected container serves a incompatible database object');
            }

            return 
    call_user_func_array(
                array(
                    
    self::$container->offsetGet('database'),
                    
    $method
                
    ),
                
    $arguments
            
    );
        }

        public static function 
    connectContainer(ArrayObject $container){
            
    self::$container $container;
        }

    }

    $container = new ArrayObject();
    $container['database'] = new PDO('mysql:host=localhost;dbname=test''root''');

    Database::connectContainer($container);
    Und in gaestebuch.php z.B.

    PHP-Code:
    <?php

    include('container.php');

    //code, code, code

    $val Database::prepare('SELECT * FROM beitrage WHERE id = ?);
    $val->bindParam(/**/);
    //code, code, code

    Einen Kommentar schreiben:


  • tr0y
    antwortet
    Aus eigenem Interesse zeig uns lieber den Code, damit wir dir sagen können ob das halbwegs Hand und Fuß hat was du daraus gemacht hast.

    Einen Kommentar schreiben:

Lädt...
X