php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2005

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 20.05.2005, 22:17  
Gast
 
Beiträge: n/a
Standard Singleton Klasse - falsche Werte

Hi,

ich hab etwas mit einer Singleton Klasse rumgebastelt (PHP 5.0.4), und dabei ewig nach dem Grund für die falschen Werte gesucht, den folgender Code produziert... Bis ich festgestellt habe das PHP5 wohl selbstständig meinen Singleton-Attributen einfach allen die gleichen Werte drüberbügelt?? Ist das vielleicht ein PHP5 Bug oder hab ich das PHP5 Singleton-Prinzip grundsätzlich nicht kapiert?

Code:
<?
class Singleton
{
	private static $instance = null;
	
	public $value_A;
	public $value_B;

	private function __construct() 
	{
	}

	public static function getInstance()
	{
		if (self::$instance == null)
		{
			self::$instance = new Singleton ();
		}
		return self::$instance;
	}
}

class UsingIt
{
	private $mySingleton;

	function __construct ()
	{
		$this->$mySingleton = Singleton::getInstance();
	}
	
	public function setSingletonValues ()
	{
		$this->$mySingleton->$value_A = "A";
		$this->$mySingleton->$value_B = "B";
	}
}
	
	$object = new UsingIt();
	$object->setSingletonValues();
	
	$mySingleton = Singleton::getInstance();
	
	echo "A: " . $mySingleton->$value_A;
	echo "
";
	echo "B: " . $mySingleton->$value_B;
	echo "
";
	echo "not existing: " . $mySingleton->$actually_nothing;

?>
Warum gibt der für $value_A, $value_B und dann noch für gar nicht verwendete Variablen immer allen den zuletzt zugewiesenen Wert eines Singleton-Attributs zu?

Wäre echt super wenn mir jemand was dazu sagen könnte, sitzt schon seit Stunden daran.
 
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 20.05.2005, 22:43  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Vielleicht einfach mal das Error Reporting Level hochsetzen?

Die Syntax ist:
Code:
$Obj->attr
Nicht:
Code:
$Obj->$attr
Basti
Basti ist offline  
Alt 20.05.2005, 22:57  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

hi.

verzichte, soweit möglich, auf singletons und gib UsingIt eine instanz von Singleton in den Konstruktor mit. damit erhöhst du die wiederverwendbarkeit deines codes.

genauere erklärungen kannst du unter http://www.phpfriend.de/ftopic36035.html nachlesen.

PHP-Code:
<?php
class Singleton{
   private static 
$instance null;
   public 
$value_A;
   public 
$value_B;
   public static function &
getInstance()   {
      if (
self::$instance == null)      {
         
self::$instance = &new Singleton ();
      }
      return 
self::$instance;
   }
}

class 
UsingIt{
   private 
$mySingleton;
   function 
__construct ()   {
      
$this->mySingleton =& Singleton::getInstance();
   }

?>
... guck dir mal die verwendung von '&' an.

grüße
axo
axo ist offline  
Alt 20.05.2005, 23:12  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard Re: Singleton Klasse - falsche Werte

Zitat:
Zitat von geek
hab ich das PHP5 Singleton-Prinzip grundsätzlich nicht kapiert?
Viel simpler.

So greift man nicht auf Objektvariablen zu:
PHP-Code:
$this->$mySingleton->$value_A "A"
Zu viele Dollars...

Der Beitrag wurde verschoben, wegen...
... Postings im falschen Forum.

Bemerkung:
Die gestellte Frage entspricht nicht dem Wissensstand eines/einer Fortgeschrittenen.
Die gestellte Frage entspricht nicht dem Wissensstand eines Profis. Dazu: http://www.phpfriend.de/forum/viewtopic.php?t=21431

moved to PHP - Anfänger
__________________
mod = master of disaster
Waq ist offline  
Alt 21.05.2005, 00:36  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von axo
... guck dir mal die verwendung von '&' an.
Ich meine, das gehört nicht zu einem Charakteristikum eines Singletons, dass die Vars, die auf die Instanz der Klasse zeigen auch Referenzen sein müssen, oder? Das wäre ja nur nötig, wenn es auch eine Methode zum Zerstören des Singletons gäbe und hier fehlt mir die Phantasie, einen Sinn darin zu sehen.

Bei self::$instance = new Singleton(); macht es in jedem Fall überhaupt keinen Sinn, da ja nur ein self::$instance existiert.

Basti
Basti ist offline  
Alt 21.05.2005, 00:43  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Zitat:
Zitat von axo
... guck dir mal die verwendung von '&' an.
So lange man mit PHP 5 arbeitet und es um Objekte geht ist das unnötig.
__________________
mod = master of disaster
Waq ist offline  
Alt 21.05.2005, 00:52  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

oh mann ich bin ja sooo doof.

Zitat:
Singleton-Prinzip grundsätzlich nicht kapiert
Zitat:
Warum gibt der für $value_A, $value_B und dann noch für gar nicht verwendete Variablen immer allen den zuletzt zugewiesenen Wert eines Singleton-Attributs zu?
naja, du hast es wirklich nicht kapiert ...
das singleton-pattern ist eigentlich nur ein workaround in sprachen, die keine 'globals' haben.
aus diesem grund ist das pattern in php relativ sinnfrei.

PHP-Code:
$db = new DB();

function 
one() {
 global 
$db;
}

function 
two() {
 global 
$db;

... und fertig ist das singleton. und damit sind auch die nachteile offensichtlich.

und ja - mit diesem pattern und getInstance() bekommst du immer das selbe objekt zurückgeliefert und nicht jedesmal ein neues - wie bei der verwendung von 'globals' auch.
das ist der sinn und zweck des singleton-patterns. wenn dem so ist, stimmt das ja schon.
axo ist offline  
Alt 21.05.2005, 00:53  
axo
Erfahrener Benutzer
 
Registriert seit: 24.12.2004
Beiträge: 1.814
axo ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Zitat:
Zitat von Waq
Zitat:
Zitat von axo
... guck dir mal die verwendung von '&' an.
So lange man mit PHP 5 arbeitet und es um Objekte geht ist das unnötig.
sischä ist sischä ... /me persönlich vertraut php5 noch nicht ganz, dass es referenzen ordentlich selbst verwalten kann - mich begeistern nur die benchmarks.
axo ist offline  
Alt 21.05.2005, 00:55  
Erfahrener Benutzer
 
Registriert seit: 18.07.2004
Beiträge: 2.162
PHP-Kenntnisse:
Fortgeschritten
Basti
Standard

Zitat:
Zitat von Waq
Zitat:
Zitat von axo
... guck dir mal die verwendung von '&' an.
So lange man mit PHP 5 arbeitet und es um Objekte geht ist das unnötig.
Wie geschrieben: Es würde eben dann Sinn machen, wenn du das Objekt auch wieder zentral zerstören wolltest.
Basti ist offline  
Alt 21.05.2005, 01:00  
Waq
Erfahrener Benutzer
 
Registriert seit: 15.08.2004
Beiträge: 2.473
Waq
Standard

Zitat:
Zitat von axo
das singleton-pattern ist eigentlich nur ein workaround in sprachen, die keine 'globals' haben.
aus diesem grund ist das pattern in php relativ sinnfrei.
Pure variablen haben keine lazy-Instanzierung beim Zugreifen.
__________________
mod = master of disaster
Waq ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
session_set_save_handler- falsche Werte in Datei kanti PHP Tipps 2008 2 09.06.2008 11:40
Variable aus Klasse herausbekommen GSJLink PHP Tipps 2008 7 16.02.2008 22:25
Gegenstück zu parent:: oder Singleton abstrakt implement. ?? Melchior PHP-Fortgeschrittene 13 26.07.2007 21:25
String-Parser Klasse - was muss rein? Matze PHP Tipps 2007 2 08.04.2007 22:14
Singleton besser als komplett statische Klasse ? Cmon PHP-Fortgeschrittene 4 13.06.2006 00:34
mehr als eine Klasse einbinden Alpha Centauri PHP-Fortgeschrittene 4 13.04.2006 20:56
Klasenname einer nicht instanziierten Klasse DerDesian PHP Tipps 2007 9 30.11.2005 13:13
Instanz einer Klasse in einer anderen Klasse verwenden Buhmann PHP-Fortgeschrittene 7 28.10.2005 23:12
[Erledigt] Führerschein für Klasse A+B.. Preis OK??? Off-Topic Diskussionen 20 13.07.2005 18:44
Rückgabewert auf einer Klasse anders als in der Klasse micbur PHP Tipps 2005-2 6 10.06.2005 15:06
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
[Erledigt] Problem mit Übergabe einer Klasse in PHP4 PHP-Fortgeschrittene 10 08.01.2005 21:00
Klasse holt sich die Klasse PHP-Fortgeschrittene 9 07.10.2004 11:53
[Erledigt] Brauche Hilfe bei meiner ersten Klasse PHP-Fortgeschrittene 9 24.09.2004 17:09
Klasse ändern UniQ PHP Tipps 2004 5 24.08.2004 14:46

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
singleton klasse, php getinstance falsche instance, singleton php klasse mehrere parameter, php session_set_save_handler singleton, php singleton getinstance mit string, php singelton mit private attributen, php5 singleton klasse, klasse singelton klasse php, singleton-klasse, php variable gibt falsche werte aus, php songleton klassen, singleton klasse attribut, singleton attribut, singleton attributen, php singleton klasse erkennen

Alle Zeitangaben in WEZ +2. Es ist jetzt 14:02 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.