Werden PHP-Variablen als Wert oder als Referenz übergeben?

13 answers
  • Dies ist der Wert gemäß der PHP-Dokumentation .

    Standardmäßig werden Funktionsargumente als Wert übergeben (wenn also der Wert des Arguments innerhalb der Funktion geändert wird, wird er außerhalb der Funktion nicht geändert.) ). Damit eine Funktion ihre Argumente ändern kann, müssen sie als Verweis übergeben werden.

    Um ein Argument immer an eine Funktion übergeben zu haben, muss ein kaufmännisches Und-Zeichen ( & amp; ) auf den Argumentnamen in der Funktionsdefinition.

     <?php
    function add_some_extra(&$string)
    {
        $string .= 'and something extra.';
    }
    
    $str = 'This is a string, ';
    add_some_extra($str);
    echo $str;    // outputs 'This is a string, and something extra.'
    ?>
     
    05 July 2016
    Prabu GunaMichael Stum
  • Es scheint, dass viele Leute verwirrt sind, wenn Objekte an Funktionen übergeben werden und was durch Referenzmittel passiert. Objektvariablen werden weiterhin als Wert übergeben. Nur der in PHP5 übergebene Wert ist ein Referenz-Handle. Zum Beweis:

     <?php
    class Holder {
        private $value;
    
        public function __construct($value) {
            $this->value = $value;
        }
    
        public function getValue() {
            return $this->value;
        }
    }
    
    function swap($x, $y) {
        $tmp = $x;
        $x = $y;
        $y = $tmp;
    }
    
    $a = new Holder('a');
    $b = new Holder('b');
    swap($a, $b);
    
    echo $a->getValue() . ", " . $b->getValue() . "\n";
     

    Ausgaben:

     a, b
     

    Wenn durch Referenz übergeben wird, bedeutet, dass wir kann die vom Aufrufer angezeigten Variablen ändern. Was der obige Code eindeutig nicht tut. Wir müssen die Swap-Funktion ändern in:

     <?php
    function swap(&$x, &$y) {
        $tmp = $x;
        $x = $y;
        $y = $tmp;
    }
    
    $a = new Holder('a');
    $b = new Holder('b');
    swap($a, $b);
    
    echo $a->getValue() . ", " . $b->getValue() . "\n";
     

    Ausgaben:

     b, a
     

    , um als Referenz durchzugehen.

    28 October 2014
    guitarlass
  • In PHP werden Objekte standardmäßig als Referenzkopie an ein neues Objekt übergeben.

    Siehe dieses Beispiel ............ .

     class X {
      var $abc = 10; 
    }
    
    class Y {
    
      var $abc = 20; 
      function changeValue($obj)
      {
       $obj->abc = 30;
      }
    }
    
    $x = new X();
    $y = new Y();
    
    echo $x->abc; //outputs 10
    $y->changeValue($x);
    echo $x->abc; //outputs 30
     

    Nun sehen Sie dies ..............

     class X {
      var $abc = 10; 
    }
    
    class Y {
    
      var $abc = 20; 
      function changeValue($obj)
      {
        $obj = new Y();
      }
    }
    
    $x = new X();
    $y = new Y();
    
    echo $x->abc; //outputs 10
    $y->changeValue($x);
    echo $x->abc; //outputs 10 not 20 same as java does.
     

    Nun sehen Sie das ..............

     class X {
      var $abc = 10; 
    }
    
    class Y {
    
      var $abc = 20; 
      function changeValue(&$obj)
      {
        $obj = new Y();
      }
    }
    
    $x = new X();
    $y = new Y();
    
    echo $x->abc; //outputs 10
    $y->changeValue($x);
    echo $x->abc; //outputs 20 not possible in java.
     

    Ich hoffe, Sie können das verstehen.

    14 March 2012
    hardik
  • http://www.php.net/manual/de /migration5.oop.php

    In PHP 5 gibt es ein neues Objektmodell. Die Handhabung von Objekten in PHP wurde komplett neu geschrieben, was eine bessere Leistung und mehr Funktionen ermöglicht. In früheren PHP-Versionen wurden Objekte wie primitive Typen behandelt (z. B. Ganzzahlen und Strings). Der Nachteil dieser Methode war, dass das gesamte Objekt semantisch kopiert wurde, als eine Variable zugewiesen wurde, oder als Parameter an eine Methode übergeben wurde. Bei dem neuen Ansatz wird auf Objekte über einen Handle und nicht auf einen Wert verwiesen (man kann sich einen Handle als Bezeichner eines Objekts vorstellen).

    04 August 2008
    mrdenny
  • PHP-Variablen werden nach Wert zugewiesen, Funktionen nach Wert übergeben und Objekte, die Objekte enthalten / repräsentieren, werden als Referenz übergeben. Sie können erzwingen, dass Variablen per Referenz übergeben werden. Verwenden Sie dazu ein & amp;

    . Zugeordnet durch Wert / Referenzbeispiel:

     $var1 = "test";
    $var2 = $var1;
    $var2 = "new test";
    $var3 = &$var2;
    $var3 = "final test";
    
    print ("var1: $var1, var2: $var2, var3: $var3);
     

    würde ausgeben

    var1: test, var2: abschließender Test, var3: abschließender Test

    Durch Wert / Referenz übergeben:

     $var1 = "foo";
    $var2 = "bar";
    
    changeThem($var1, $var2);
    
    print "var1: $var1, var2: $var2";
    
    function changeThem($var1, &$var2){
        $var1 = "FOO";
        $var2 = "BAR";
    }
     

    würde folgendes ausgeben:

    var1: foo, var2 BAR

    Objekt Variablen, die als Referenz übergeben werden:

     class Foo{
        public $var1;
    
        function __construct(){
            $this->var1 = "foo";
        }
    
        public function printFoo(){
            print $this->var1;
        }
    }
    
    
    $foo = new Foo();
    
    changeFoo($foo);
    
    $foo->printFoo();
    
    function changeFoo($foo){
        $foo->var1 = "FOO";
    }
     

    Ausgabe:

    FOO

    (das letzte Beispiel könnte wahrscheinlich besser sein ...)

    28 June 2017
    anjucmcculloh
  • Sie können eine Variable per Verweis an eine Funktion übergeben. Diese Funktion kann die ursprüngliche Variable ändern.

    Sie können die Passage in der Funktionsdefinition als Referenz definieren:

     <?php
    function changeValue(&$var)
    {
        $var++;
    }
    
    $result=5;
    changeValue($result);
    
    echo $result; // $result is 6 here
    ?>
     
    21 December 2014
    Mahsin
  • Sie können es auf beide Arten tun.

    setzen Sie ein '& amp;' Symbol vor und die Variable, die Sie übergeben, wird mit ihrem Ursprung identisch. dh: Sie können als Referenz übergeben, anstatt eine Kopie davon zu erstellen.

    so

         $fred = 5;
        $larry = & $fred;
        $larry = 8;
        echo $fred;//this will output 8, as larry and fred are now the same reference.
     
    22 February 2009
    Bingy
  • Variablen, die primitive Typen enthalten, werden in PHP5 als Wert übergeben. Variablen, die Objekte enthalten, werden als Referenz übergeben. Es gibt einen interessanten Artikel aus dem Linux Journal von 2006, in dem diese und andere Unterschiede zwischen den OOs zwischen 4 und 5 erwähnt werden.

    http://www.linuxjournal.com/article/9170

    04 August 2008
    Polsonby
  •  class Holder
    {
        private $value;
    
        public function __construct( $value )
        {
            $this->value = $value;
        }
    
        public function getValue()
        {
            return $this->value;
        }
    
        public function setValue( $value )
        {
            return $this->value = $value;
        }
    }
    
    class Swap
    {       
        public function SwapObjects( Holder $x, Holder $y )
        {
            $tmp = $x;
    
            $x = $y;
    
            $y = $tmp;
        }
    
        public function SwapValues( Holder $x, Holder $y )
        {
            $tmp = $x->getValue();
    
            $x->setValue($y->getValue());
    
            $y->setValue($tmp);
        }
    }
    
    
    $a1 = new Holder('a');
    
    $b1 = new Holder('b');
    
    
    
    $a2 = new Holder('a');
    
    $b2 = new Holder('b');
    
    
    Swap::SwapValues($a1, $b1);
    
    Swap::SwapObjects($a2, $b2);
    
    
    
    echo 'SwapValues: ' . $a2->getValue() . ", " . $b2->getValue() . "<br>";
    
    echo 'SwapObjects: ' . $a1->getValue() . ", " . $b1->getValue() . "<br>";
     

    Attribute können noch geändert werden, wenn sie nicht als Referenz übergeben werden, also seien Sie vorsichtig.

    Ausgabe:

    SwapObjects: b, a SwapValues: a, b

    11 May 2010
    Ricardo SaracinoEight
  • Objekte werden als Referenz in PHP 5 und als Wert in PHP 4 übergeben. Variablen werden standardmäßig als Wert übergeben!

    Lesen Sie hier: http://www.webeks.net/programming/ PHP / Ampersand-Operator-für-Zuweisungs-Referenz verwendet.html

    09 January 2010
    Miha