1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

referenzen in PHP5

    • Info
  • phudy
  • 12. Februar 2007 um 00:05
  • Unerledigt
  • phudy
    10
    phudy
    Mitglied
    Reaktionen
    12
    Punkte
    1.087
    Beiträge
    182
    • 12. Februar 2007 um 00:05
    • #1

    ich hab mich schon immer gefragt wie das eigentlich in php ist, hier die antwort:

    PHP
    <?php
    
    
    class Simple {
    
    	private $foo;
    
    	public function Simple($string) {
    		$this->foo = $string;
    	}
    
    	public function setFoo($foo) {
    		$this->foo = $foo;
    	}
    
    	public function __toString() { // override magic method
    		return $this->foo;
    	}
    
    	public function addBar() {
    		$this->foo .= ' bar';
    		return $this; // return yourself
    	}
    }
    
    
    $s0 = new Simple('s0');
    $s0->addBar()->addBar()->addBar()->addBar();
    echo "s0 = $s0 <br /><br />";
    
    
    
    
    $s1 = new Simple('s1'); // same as: $s1 =& new Simple('s1');
    $s2 = new Simple('s2');
    
    
    $s3 = $s1; // same as: $s3 =& $s1;
    $s3->setFoo('s3 was reassigned from s1');
    
    
    $s4 = clone $s2;
    $s4->setFoo('s4 was cloned from s2');
    
    
    printf("s1 = %s<br />", $s1);
    printf("s2 = %s<br />", $s2);
    printf("s3 = %s<br />", $s3);
    printf("s4 = %s<br />", $s4);
    echo '<br />';
    echo '<br />';
    
    
    
    
    
    
    class Ext {
    	public function Ext() {
    
    	}
    
    	public function doSimple($simple) { // same as: (&$simple) {
    		$simple->setFoo('ext did something');
    	}	
    }
    
    
    $s5 = new Simple('s5');
    $s6 = new Simple('s6 passed as clone');
    
    
    $ext = new Ext();
    $ext->doSimple($s5);
    $ext->doSimple(clone $s6);
    
    
    printf("s5 = %s<br />", $s5);
    printf("s6 = %s<br />", $s6);
    
    
    /*
    generates:
    --------------
    
    
    s0 = s0 bar bar bar bar 
    
    
    s1 = s3 was reassigned from s1
    s2 = s2
    s3 = s3 was reassigned from s1
    s4 = s4 was cloned from s2
    
    
    
    
    s5 = ext did something
    s6 = s6 passed as clone
    
    
    */
    
    
    ?>
    Alles anzeigen

    kurz gesagt: es wird -wie bei java auch- immer nur die referenz uebergeben, niemals das objekt (adressen auslesen mit dem &-operator haben keinen (zusaetzlichen) effekt). um eine kopie zu uebergeben muss das objekt vorher mit dem schluesselwort "clone" kopiert werden.

    zumindest ist das so in der version 5.2.0

  • Swoncen
    22
    Swoncen
    Mitglied
    Reaktionen
    1
    Punkte
    5.331
    Beiträge
    993
    • 12. Februar 2007 um 07:59
    • #2

    gut zu wissen..

    640K ought to be enough for anybody. :eek2:

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung