Schreibbare Variable für alle Klasseninstanzen

String

Erfahrenes Mitglied
Hallo zusammen,

ist es möglich eine Variable für alle Klasseninstanzen schreibbar und lesbar zu gestalten?

PHP:
include("meineKlasse.php");

$super_var = 34.2;

$clients[] = new meineKlasse();
$clients[] = new meineKlasse();

Jetzt sollen halt die 2 Clienten auf die super_var zurückgreifen und zur not auch bearbeiten können.

Ich würde höchst ungern auf _SESSION oder ähnlichem zurückgreifen.

Im internet habe ich nicht wirklich Lösungen gefunden, wie man es jetzt richtig macht und vorallem, warum man es so machen sollte.

Danke schonmal im Voraus.

paD
 
Entweder du übergibst sie als referenzierte Variable., oder du greifst über globals zu

Ich hab hier mal 2 Varianten
PHP:
$var = 'foo';
$c = new C1();
echo $var;
$c->setVar('bar');
echo $var;

echo "<hr />";

$var = 'foo';
$c = new C2();
echo $var;
$c->setVar('bar');
echo $var;

//Direckt auf die globale Variable zugreiffen
class C1{
    public function setVar($newVar){        
        $GLOBALS['var'] = $newVar;
    }
}

//über eine Referenz arbeiten
class C2{
    private $var;
    public function __construct(){
        //$GLOBALS['var'] referenzerieren
        $this->var = &$GLOBALS['var'];
    }
    public function setVar($newVar){
        $this->var = $newVar;
    }
}
 
irgendwie klappt das noch nicht ganz..

PHP:
$GLOBALS['clients'] = array();

$GLOBALS['clients'][] = new Client();
$GLOBALS['clients'][] = new Client();

/// 

Class Client {
function Client() {
    print count($GLOBALS['clients']);
}
}

/// Ausgabe:
0
0

Weißt du wo dort der Wurm drin ist? :)

paD
 
Zuletzt bearbeitet:
Kein Wunder du überschreibst ja deine globale Variable mit einer Klasseninstanz.
Beim der ersten Instanzierung von Client ist $clients noch ein leerer Array. count($clients) muss da 0 sein.
Bei der Zweiten ist aber $clients ein Object vom Typ Client. Du willst duie 2 Objekte wahrscheinlich aber dem Array hinzufügen, anstatt ihn zu ersetzen.
Dann müsste es so aussehen
PHP:
$GLOBALS['clients'][] = new Client();
$GLOBALS['clients'][] = new Client();
 
Also bei mir ist die Anzeige: "01"

Der Grund ist der, dass die Zuweisung erst NACH dem Aufruf der Funktion geschieht.

Den Sinn hinter deinem Versuch versteh ich aber nicht wirklich...
 
irgendwie klappt das noch nicht ganz..

PHP:
$GLOBALS['clients'] = array();

$GLOBALS['clients'][] = new Client();
$GLOBALS['clients'][] = new Client();

/// 

Class Client {
function Client() {
    print count($GLOBALS['clients']);
}
}

/// Ausgabe:
0
0

Weißt du wo dort der Wurm drin ist? :)

paD

Sorry, hatte das beim schreiben in den Thread vergessen, im Code ist es aber vorhanden.

@Flex, der sinn der Sache ist einfach, dass ein Client auf alle anderen Clienten zugreifen kann um denen etwas zu senden ect. pp.

Allerdings funktioniert es jetzt. Hat sich also erledigt :)
Dankeschön.

Das Problem bei mir war einfach wie Flex schrieb, dass ich das aufrufe, bevor es erstellt wurde.

Also Globals und alles ist gut ;)

paD
 
Muss deine Variable ein Array sein?
Ansonstne könntest es mit einer Konstante machen.
PHP:
define('TEST', 15.45);
	
	class TestClass{
		
		public function __construct(){
			echo TEST;
		}
		
	}
	
	$tc = new TestClass();
 
Zurück