2010-10-18 24 views
1

Ceci est lié à la question: How does the "&" operator work in a PHP function?Y at-il un code PHP simple pour distinguer "Passer l'objet comme référence" vs "Passer la référence d'objet comme valeur"?

Y at-il un code simple pour montrer la différence entre

passer l'objet comme référence

vs

passage de référence de l'objet en tant que valeur?

+0

N'a pas Konrad Rudolph déjà fourni [par exemple] (http://pastie.org/1229473)? – BoltClock

+0

intéressant ... Je pensais que dans la communauté C, passer un objet par référence revient à passer sa référence en valeur ... ce que je vois dans l'exemple de code ci-dessus s'appellerait "passer sa référence comme référence" –

+0

voir ce lien par exemple: http://stackoverflow.com/questions/879/are-php-variables-passed-by-value-or-by-reference – Mahsin

Répondre

0
<?php 
class X { 
    var $abc = 10; 
} 
class Y { 
    var $abc = 20; 
    function changeValue(&$obj){//1>here the object,$x is a reference to the object,$obj.hence it is "passing the object's reference as value" 
     echo 'inside function :'.$obj->abc.'<br />';//2>it prints 10,bcz it accesses the $abc property of class X, since $x is a reference to $obj. 
     $obj = new Y();//but here a new instance of class Y is created.hence $obj became the object of class Y. 
     echo 'inside function :'.$obj->abc.'<br />';//3>hence here it accesses the $abc property of class Y. 
    } 
} 
$x = new X(); 
$y = new Y(); 

$y->changeValue($x);//here the object,$x is passed as value.hence it is "passing the object as value" 
echo $x->abc; //4>As the value has been changed through it's reference ,hence it calls $abc property of class Y not class X.though $x is the object of class X 
?> 

o/p:

inside function :10 
inside function :20 
20 
0

Que diriez-vous ceci:

<?php 
class MyClass { 
    public $value = 'original object and value'; 
} 

function changeByValue($originalObject) { 
    $newObject = new MyClass(); 
    $newObject->value = 'new object'; 

    $originalObject->value = 'changed value'; 

    // This line has no affect outside the function, and is 
    // therefore redundant here (and so are the 2 lines at the 
    // the top of this function), because the object 
    // "reference" was passed "by value". 
    $originalObject = $newObject; 
} 

function changeByReference(&$originalObject) { 
    $newObject = new MyClass(); 
    $newObject->value = 'new object'; 

    $originalObject->value = 'changed value'; 

    // This line changes the object "reference" that was passed 
    // in, because the "reference" was passed "by reference". 
    // The passed in object is replaced by a new one, making the 
    // previous line redundant here. 
    $originalObject = $newObject; 
} 

$object = new MyClass(); 
echo $object->value; // 'original object and value'; 

changeByValue($object) 
echo $object->value; // 'changed value'; 

$object = new MyClass(); 
echo $object->value; // 'original object and value'; 

changeByReference($object) 
echo $object->value; // 'new object'; 
2

Vous pouvez passer une variable à une fonction par référence. Cette fonction sera capable de modifier la variable d'origine.

Vous pouvez définir le passage par référence dans la définition de la fonction:

<?php 
function changeValue(&$var) 
{ 
    $var++; 
} 

$result=5; 
changeValue($result); 

echo $result; // $result is 6 here 
?>