tutorials.de Buch-Aktion 05/2012
Like Tree4Danke
  • 1 Beitrag von Napofis
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Napofis
  • 1 Beitrag von Napofis
ERLEDIGT
JA
ANTWORTEN
8
ZUGRIFFE
373
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    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
     

  2. #2
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    Wegen dieser Zeile:
    PHP-Code:
    $obj =& new stdClass
    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.

    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.php
    Geändert von Napofis (25.05.11 um 14:57 Uhr)
    hoctar bedankt sich. 

  3. #3
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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.
    PHP-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;        
        }

    So funktioniert es auch, wenn die Zuweisung über eine Referenz erstellt wird
    hoctar bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    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

  4. #4
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    Zitat Zitat von Yaslaw Beitrag anzeigen
    PHP-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;        
        }

    So funktioniert es auch, wenn die Zuweisung über eine Referenz erstellt wird
    Code :
    1
    
    Deprecated: Assigning the return value of new by reference is deprecated ....
    hoctar bedankt sich. 

  5. #5
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  6. #6
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    Verstehe. Was wird den nun in $obj gespeichert, wenn ich die Instanz so bilde $obj = new Class1; ?
    Es steht keine Referenz, oder?
     

  7. #7
    Avatar von Napofis
    Napofis Napofis ist offline require 'brain.php';
    Registriert seit
    Jun 2007
    Ort
    Bayern
    Beiträge
    587
    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.
    hoctar bedankt sich. 

  8. #8
    hoctar hoctar ist offline Mitglied Brokat
    Registriert seit
    Jun 2007
    Beiträge
    344
    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?
     

  9. #9
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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

  1. Teil einer statischen URL auslesen
    Von makesomenoise im Forum PHP
    Antworten: 8
    Letzter Beitrag: 22.05.09, 13:19
  2. Antworten: 6
    Letzter Beitrag: 15.05.08, 19:12
  3. Komponente zum statischen Speichern von TStringList
    Von St0fF im Forum Borland CBuilder und VCL
    Antworten: 1
    Letzter Beitrag: 08.04.06, 15:34
  4. Antworten: 11
    Letzter Beitrag: 11.05.04, 16:05
  5. HAUSAUFGABE: Sortieren einer Pointer Variable
    Von DevEye im Forum Delphi, Kylix, Pascal
    Antworten: 2
    Letzter Beitrag: 05.11.02, 13:32

Stichworte