Autoload und Single,- bzw. Factory

Habe ich genauso wenig ein Problem mit :-P Oder ich verstehe dich einfach komplett falsch.

PHP:
abstract class Singleton
{
	protected function __construct() {}
	
	static final function &getInstance()
	{
		static $instance;
		
		if(!isset($instance))
			$instance = new static();
			
		return $instance;
	}
	
	protected function test_($cls)
	{
		echo "Hallo sagt ".$cls."<br />";
	}
}

class test extends Singleton
{
	public function test_()
	{
		parent::test_(__class__);
	}
}
class test1 extends Singleton
{
	public function test_()
	{
		parent::test_(__class__);
	}
}

class base extends Singleton
{
	protected function __construct()
	{
		parent::test_(__class__);
	}
	
	function load($classname)
	{
		$this->$classname = &$classname::getInstance();
		$this->$classname->test_(); // Test von "Innen"
	}
}

$b = &base::getInstance();

$b->load('test');
$b->load('test1');

$b->test->test_(); // Test von "Außen"

var_dump($b);
 
Stellt sich nur die Frage, ob Zend Studio den PHP Parser nimmt, oder nochmal etwas eigenes. Vielleicht erkennt es nicht, dass es sich von PHP aus um ein gültiges Konstrukt handelt.

Nie auf sowas verlassen. Einfach testen, wenn es deiner Logik nach richtig sein müsste. Der PHP Parser wird dich dann schon entsprechend belohnen ;)
 
Kurzer Test:

Code:
<?php
class klasse
{
    function getInstance()
    {
      return 'jo';
    } 
}
$classdata='klasse';
echo $classdata::getInstance();  
?>

...Ausgabe: jo ....kein Parse-Error
 
Stellt sich nur die Frage, ob Zend Studio den PHP Parser nimmt, oder nochmal etwas eigenes. Vielleicht erkennt es nicht, dass es sich von PHP aus um ein gültiges Konstrukt handelt.

Nie auf sowas verlassen. Einfach testen, wenn es deiner Logik nach richtig sein müsste. Der PHP Parser wird dich dann schon entsprechend belohnen ;)

Genau das ist es ja, nach meiner Logik her ist es ja auch ein Error :D

Ich werde das jetzt erst mal weiter bauen, mal sehen, was es gibt :)

Danke euch erstmal :)

Der Parse-Error ist: T_PAAMAYIM_NEKUDOTAYIM

:D
 
Zuletzt bearbeitet:
Wie sieht die Zeile dazu aus?
Ich wette, dass du nur ein Doppelpunkt hast, statt zwei.
 
Zuletzt bearbeitet:
Hast du Mal genau meinen Codeschnippsel getestet, ob der Fehler dort auch auftaucht?
Teste hier mit einem Windows PHP 5.3.0 und es geht ohne Probleme.

Edit:
Debian PHP 5.2.8 bringt den Fehler wie bei dir. Scheint also erst ab 5.3.0 möglich zu sein.

Edit2:
PHP:
	$this->$classname = call_user_func(array($classname, 'getInstance'));
Das sollte tun, was du willst :-P Funktioniert zumindest mit 5.2.8. Eine andere Version habe ich immo nicht zur Verfügung.
 
Zuletzt bearbeitet:
Zurück