XHTMLforum

XHTMLforum (http://xhtmlforum.de/index.php)
-   Serveradministration und serverseitige Scripte (http://xhtmlforum.de/forumdisplay.php?f=80)
-   -   Singleton Pattern Problem, OOP, PHP (http://xhtmlforum.de/showthread.php?t=47240)

ArcVieh 06.08.2007 15:34

Singleton Pattern Problem, OOP, PHP
 
Guten Tag,
ich kam auf die fixe Idee, eine Klasse namens Loader zu schreiben, die sich selbst instanziiert und zugleich auch noch andere Objekte erstellen soll, aber eben nur einmalig.
Das ganze soll nacher noch mit einem Code kombiniert werden, der bestimmte Dateien aus einem Ordner ausließt und die dort enthaltenden Klassen dem Loader zum Fraß vorwirft. ;)

Im Moment ist es nur eine Spielerei.

Mein Problem ist nun, dass er zwar andere Objekte erstellen zu scheint, aber ich nicht auf die Funktionen in denen zugreifen kann. Ich bekomme immer folgende Ausgabe:
Code:

hello world Fatal error: Call to a member function irgend() on a non-object in /srv/www/vhosts/mydomain.tld/httpdocs/loader.php on line 33
Hier mein momentaner Code.
PHP-Code:

<?php
    
class Loader {
        private static 
$instances = array();
        private static 
$instance false;
        private function 
__construct() {
        }
                
//Nun folgt die Funktion die Loader erstellt
        
public static function getInstance() {
            if(
self::$instance === false) {
                
self::$instance = new Loader();
            }
            return 
self::$instance;
        }
                
//"Sammel" Funktion, die andere Instanzen erstellen soll
        
public static function getInstances($var) {
            if(!
in_array($varself::$instances)) {
                
self::$instances[$var] = new $var();
            }
                        
//Direkte Referenz auf das Objekt zurückgegeben
            
return $obj &= self::$instances[$var]; 
        }
    }
    
$obj Loader::getInstance();
    class 
test {
        public function 
test() {
            echo 
"hello world";
        }
        public function 
irgend($var){
            echo 
$var;
        }
    }
    
$test $obj->getInstances('test');
    
$test->irgend('Hallo');
?>

Vielleicht kann mir ja wer auf die Sprünge helfen, wo das Problem liegt.

Danke & Grüße,
ArcVieh

fox 06.08.2007 20:20

So gehts:

PHP-Code:

<?php
// ...
        //"Sammel" Funktion, die andere Instanzen erstellen soll
        
public static function getInstances($var) {
            if(!
in_array($varself::$instances)) {
                
self::$instances[$var] = new $var();
            }

            
//Direkte Referenz auf das Objekt zurückgegeben
            
return self::$instances[$var];
        }
// ... 
?>

Ein var_dump ($test); hätte vielleicht auch schon geholfen ;)

ArcVieh 06.08.2007 21:21

Oh, danke dir Fox.
Ja, ein var_dump hätte mich vermutlich stutzig machen sollen, ich muss mir das mal angewöhnen. ;)
Der Hintergedanke mit dem &= Operator war, wirklich die Referenz auf das Objekt zu bekommen, was aber natürlich blödsinn war, denn self:instances[$var] liefert es ja.

Vielen Dank,
ArcVieh

xm22 07.08.2007 11:13

Objekte werden ab PHP5 sowieso nur als Referenzen übergeben..


Alle Zeitangaben in WEZ +2. Es ist jetzt 09:29 Uhr.

Powered by vBulletin® Version 3.8.11 (Deutsch)
Copyright ©2000 - 2021, vBulletin Solutions, Inc.

© Dirk H. 2003 - 2020