☺️Tham chiếu (&$) Full (ok)

https://stackoverflow.com/questions/20419613/php-string-what-does-this-mean

Có nghĩa là nếu bạn thay đổi nó bên trong hàm của mình thì nó cũng sẽ bị thay đổi bên ngoài nó

1. &$variable

<?php
function changeString( &$sTest1, $sTest2, &$sTest3 ) {
  $sTest1 = 'changed';
  $sTest2 = 'changed';
  $sTest3 = 'changed';
}
$sOuterTest1 = 'original';
$sOuterTest2 = 'original';
$sOuterTest3 = 'original';
changeString($sOuterTest1, $sOuterTest2, $sOuterTest3);
echo $sOuterTest1;
echo "<br/>";
echo $sOuterTest2;
echo "<br/>";
echo $sOuterTest3;
?>
changed
original
changed

😃

<?php
$number = 3;
$pointer = &$number;  // Sets $pointer to a reference to $number
echo $number."<br/>"; // Outputs  '3' and a line break
$pointer = 24;        // Sets $number to 24
echo $number;         // Outputs '24'
?>
<?php
$foo = 'Bob';              // Assign the value 'Bob' to $foo
$bar = &$foo;              // Reference $foo via $bar.
echo $bar; // Bob
echo "<br/>";
echo $foo; // Bob
echo "<br/>";
$bar = "My name is $bar";  // Alter $bar...
echo $bar; //My name is Bob
echo "<br/>";
echo $foo;  // My name is Bob

2. &function

3. class => các đối tượng luôn được truyền theo tham chiếu 😀

3.1

class myClass
{
  public $var;
}
function incrementVar($a)
{
  $a++;
}
function incrementVarRef(&$a)
{ // not deprecated
  $a++;
}
function incrementObj($obj)
{
  $obj->var++;
}
// == Test 1
// $a = 1;
// incrementVar($a);
// echo "test1 " . $a; // test1 1
// == End Test 1
// == Test 2
// $a = 1; 
// incrementVar(&$a);   
// echo "test2 " . $a; // Error Test 2
// == End Test 2
// == Test 3
// $a = 1; 
// incrementVarRef($a); 
// echo "test3 " . $a; // test3 2
// == End Test 3
// == Test 4
$c = new myClass();
$c->var = 1;
incrementObj($c);    
echo "test4 " . $c->var; // test4 2 => các đối tượng luôn được truyền theo tham chiếu 😀
// == End Test 4

3.2

class foo
{
  public $value = 42;
  public function getValue()
  {
    return $this->value;
  }
}
$obj = new foo;
// $myValue = &$obj->getValue();
// echo $myValue; // 42
// echo "<br/>";
// $obj->value = 2;
// echo $myValue; // 2
// echo "<br/>";
// ==
$myValue = $obj->getValue();
echo $myValue; // 42
echo "<br/>";
$obj->value = 2;
echo $myValue; // 42

3.3

<?php
class foo
{
  public $value = 42;
  public function &getValue()
  {
    return $this->value;
  }
}
$obj = new foo;
// $myValue = &$obj->getValue();
// echo $myValue; // 42
// echo "<br/>";
// $obj->value = 2;
// echo $myValue; // 2
// echo "<br/>";
// ==
$myValue = $obj->getValue();
echo $myValue; // 42
echo "<br/>";
$obj->value = 2;
echo $myValue; // 42

3.4

<?php
class foo
{
  public $value = 42;
  public function &getValue()
  {
    return $this->value;
  }
}
$obj = new foo;
$myValue = $obj->getValue();
echo $myValue; // 42
echo "<br/>";
$obj->value = 2;
echo $myValue; // 2

3.5

Error 😎

<?php
class foo
{
  public $value = 42;
  public function getValue()
  {
    return $this->value;
  }
}
$obj = new foo;
$myValue = &$obj->getValue();
echo $myValue; 

3.6

<?php
class foo
{
  public $value = 42;
  public function &getValue()
  {
    return $this->value;
  }
}
$obj = new foo;
$myValue = &$obj->getValue();
echo $myValue; // 42
echo "<br/>";
$obj->value = 2;
echo $myValue; // 2
echo "<br/>";

Last updated