☺️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