phpbar.de logo

Mailinglisten-Archive

AW: [php] Superglobale Variablen

AW: [php] Superglobale Variablen

Kai Meder php_(at)_phpcenter.de
Tue, 17 Sep 2002 17:59:44 +0200


> >leider müsste dass dann so aussehen (geht in PHP auch nicht ;-))
>
> >class artikel extends class_sql,helper,layout,cms_container {
> > function do_something() {
> > $this->query('SELECT * FROM artikel');
> > }
> >}
gott sei dank geht das nicht, weil das dem oop-gedanken absolut
widerspricht !
extends ist eine vererbung ...

vater erbt person
sohn erbt person

aber nicht

auto erbt möbelhaus...

das hat einfach NICHTS miteinander zutun,
was du da machst ist ein mergen von methoden und variablen,
die nichts gemein haben... das ist einfach ganz schlechter stil ...

was du haben/implementieren willst, ist der singleton-pattern ...
google -> singleton

z.b. so....

class db
{
// constructor
function db()
    {
    }

// & um eine referenz zu returnen
function &singleton()
    {
    static $instance;

    if (!isset($instance))
        $instance = new db();    // erstelle erste und einzige instanz

    // db instanz zurückliefern
    return $instance;
    }
}

wenn du jetzt irgendwo die db-class brauchst. ...

$db =& db::singleton();


in deiner artikel-class

class artikel
{
var $db;

function artikel()
    {
    $this->db =& db::singleton();
    }

function bla()
    {
    $this->db->query('SELECT foo FROM bar');
    }
}

der singleton-pattern kommt aus dem java-feld und wurde entwickelt
um immer EINE instanz einer klasse zu haben und von überall
standardisiert auf diese
instanz zugreifen zu können ..
man braucht hier also keine globalen, keine superglobalen und sonstige
variablen ..
immer wenn du die datenbank brauchst, dann holst du dir die instanz
mit dem singleton-pattern ($db =& db::singleton();)

kann man sich sowieso ganz schön in der Pear_DB anschauen ....
cvs.php.net -> pear -> db

> I woas zwar net wie du deine Klassen definierst, I mach des eigentlich
immer
> so, dass I da a Hirachie neibring...
> Aber vielleicht is des ausserhalb Bayerns net üblich ???
>
> class cms_container extends class_sql {
>   [...]
> }
>
> class layout extends cms_container {
>   [...]
> }
>
> class helper extends layout {
>   [...]
> }
>
> class artikel extends helper {
>   [...]
> }

naja, wenn die classen noch was miteinander zu tun haben, was ich
allerdings stark bezweifle, ok ...
ansonsten: s.o.


php::bar PHP Wiki   -   Listenarchive