4Danke
ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
373
373
EMPFEHLEN
-
Hallo,
ich versuche einer statischen Variable einen Pointer zuzuweisen.
PHP-Code:class Class1 {
function method() {
static $obj;
echo 'Before: <br>';
var_dump($obj);
if(!isset($obj)) {
$obj =& new stdClass;
}
echo 'After: <br>';
var_dump($obj);
return $obj;
}
}
class Class2 {
function method() {
static $obj;
echo 'Before: <br>';
var_dump($obj);
if(!isset($obj)) {
$obj = new stdClass;
}
echo 'After: <br>';
var_dump($obj);
return $obj;
}
}
$obj1 = Class1::method();
$obj2 = Class2::method();
echo '<br><br>';
$obj1 = Class1::method();
$obj2 = Class2::method();
Code :1 2 3 4 5 6 7 8 9
Before: NULL After: object(stdClass)#1 (0) { } Before: NULL After: object(stdClass)#2 (0) { } Before: NULL After: object(stdClass)#3 (0) { } Before: object(stdClass)#2 (0) { } After: object(stdClass)#2 (0) { }
Warum wird der Pointer in Class1 nicht in der statischen Variable gespeichert, aber die Kopie in Class2?
Danke schonmal fürs lesen und vllt. antworten
-
Wegen dieser Zeile:
Wenn ich das richtig in Erinnerung hab werden bei Objekten meistens Referenzen übergeben. Bei der mit =& werden nur die Objekt Attribute Referenziert und da es in dem leeren Objekt keine gibt wird also nix übergeben. Müsste da jetzt aber selber auch erst noch mal genau nachsehen. Es kommen auch einige Warnungen wenn man dein Codebeispiel so ausführt.PHP-Code:$obj =& new stdClass;
Deine Funktionen sollten auch statisch sein wenn du sie über den Paamayim Nekudotayim aufrufst.
EDIT:
habs gefunden.
http://de.php.net/manual/de/language...references.phpGeändert von Napofis (25.05.11 um 14:57 Uhr)
-
Beim ersten erstellst du eine Referenz mit dem &.
Ich würde aber noch alles sauber deklarieren (public, private, static) und auch $obj als static-Property der Klasse deklarieren, nicht innerhalb der Funktion.
So funktioniert es auch, wenn die Zuweisung über eine Referenz erstellt wirdPHP-Code:class Class3 {
private static $obj;
public static function method(){
echo 'Before: <br>';
var_dump(self::$obj);
if(!isset(self::$obj)) {
self::$obj =& new stdClass;
}
echo 'After: <br>';
var_dump(self::$obj);
return self::$obj;
}
}
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
-
Jepp, hab vergessen das & rauszulöschen...
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Verstehe. Was wird den nun in $obj gespeichert, wenn ich die Instanz so bilde $obj = new Class1; ?
Es steht keine Referenz, oder?
-
Beginnend mit PHP 5 enthält eine Objektvariable nicht mehr das Objekt als Wert, sondern nur einen Objektbezeichner, der bei Objektzugriffen die Identifizierung des eigentlichen Objektes ermöglicht.
-
Ein Frage zum Beitrag #3 von Yaslaw.
Warum muss $obj ein Attribute der Klasse sein?
Kann es nicht als statische Variable innerhalb der Methode deklariert werden?
-
Ich habe noch nie mit statischen Varibeln die nur innerhalb einer Funktion siond gearbeitet und weiss nicht wie diese siche verhält. Mit dem statischen Attribut der Klasse weiss ich wie es geht. Es ist ja ein privat Attribut und somit von aussen nicht sichtbar.
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
Ähnliche Themen
-
Teil einer statischen URL auslesen
Von makesomenoise im Forum PHPAntworten: 8Letzter Beitrag: 22.05.09, 13:19 -
Readonly-Property auf private-Variable einer statischen Klasse
Von Thomas D im Forum PHPAntworten: 6Letzter Beitrag: 15.05.08, 19:12 -
Komponente zum statischen Speichern von TStringList
Von St0fF im Forum Borland CBuilder und VCLAntworten: 1Letzter Beitrag: 08.04.06, 15:34 -
[C/C++] string Variable in einer Datei speichern
Von Radhad im Forum C/C++Antworten: 11Letzter Beitrag: 11.05.04, 16:05 -
HAUSAUFGABE: Sortieren einer Pointer Variable
Von DevEye im Forum Delphi, Kylix, PascalAntworten: 2Letzter Beitrag: 05.11.02, 13:32





Zitieren


Login






[PHP][Snippet] Array zu XML konvertieren