在C语言中,我们可以使用指针作为函数参数:
在 PHP 中是否有可能实现?
test( *text);
function test( *txt){
//codes goes here
}
在 PHP 中是否有可能实现?
PHP中的变量名以$
开头,因此$entryId
是变量的名称。在PHP面向对象编程中,$this
是一个特殊的变量,它是指向当前对象的引用。
->
用于访问PHP中的对象成员(如属性或方法),就像C++的语法一样。
因此,您的代码的意思是:将变量$entryId
的值放入此对象的entryId
字段(或属性)中。
在PHP中,&
运算符表示传递引用。这里是一个例子:
$b=2;
$a=$b;
$a=3;
print $a;
print $b;
// output is 32
$b=2;
$a=&$b; // note the & operator
$a=3;
print $a;
print $b;
// output is 33
&
运算符,所以$a
中存储了指向$b
的引用。因此,$a
实际上是指向$b
的引用。有引用,但那不是指针。
php.net有多个页面解释什么是引用, 引用有什么作用 和 引用不是什么。
在那里,多次提到:
引用不是指针。
它们提供了一种将$a
赋值给$b
的方法,以便如果重新分配$b
,$a
也会改变:
$a = 'a';
$b = &$a; // Reference
$b = 'b'; // Now $a == 'b'
function myFunc(&$b)
{
$b = 'b';
}
$a = 'a';
myFunc($a); // Now $a == 'b'
在 PHP 5.3.0 之前,还可以进行一种称为“按引用传递”的调用方式,在这种情况下,您将拥有一个“普通”的函数声明,并在调用中使用 &
运算符:
function myFunc($b)
{
$b = 'b';
}
$a = 'a';
myFunc(&$a); // As of PHP 5.3.0 produces a Fatal Error, saying:
// Call-time pass-by-reference has been removed; If you would like to pass argument by reference, modify the declaration of myFunc().
但要注意!给另一个引用赋值并不会更新原始引用:
$a = 'a';
$b = 'b';
$c = &$a;
$c = &$b; // $a == 'a'
[ 演示 ]
使用global
关键字可能会导致陷阱产生。
$a = 'a';
$b = 'b';
function myFunc()
{
global $a, $b;
$a = &$b;
var_dump($a);
}
myFunc(); // 'b'
var_dump($a); // 'a'
global $a
实际上意味着$a = &$GLOBALS['a']
,因此给它一个新的引用不会更新$GLOBALS
。$GLOBALS
来防止这种情况。= NULL
和使用unset()
之间也有区别。= NULL
会遵循引用,unset()
则不会:$a = 'a';
$b = &$a;
unset($b); // $a == 'a'
$a = 'a';
$b = &$a;
$b = NULL; // $a == NULL
总之:
引用允许实现一些本来不可能的功能,但有时候由于 PHP 语言本身的特性,它们并不表现出人们期望的行为。
function test(&$param1);
可以允许在函数中修改$param1
。 - Ryan Vincent