如何在PHP函数中使用指针?
在C中,我们可以使用指针作为函数参数:如何在PHP函数中使用指针?,php,pointers,Php,Pointers,在C中,我们可以使用指针作为函数参数: test( *text); function test( *txt){ //codes goes here } 在PHP中可能吗?在PHP中,变量名以$开头,因此$entryId是变量名。 $this是PHP面向对象编程中的一个特殊变量,它引用当前对象 -> /COD>用于访问PHP中的对象成员(如属性或方法),如C++中的语法。 因此,您的代码的意思是:将变量$entryId的值放入此对象的entryId字段(或属性)中 PHP中的&运算符表示传
test( *text);
function test( *txt){
//codes goes here
}
在PHP中可能吗?在PHP中,变量名以
$
开头,因此$entryId
是变量名。
$this
是PHP面向对象编程中的一个特殊变量,它引用当前对象
<代码> -> /COD>用于访问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
在上面的代码中,因为我们使用了&
运算符,所以$b
指向的位置的引用存储在$a
中。所以$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'
这也可用于函数参数:
$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
来防止这种情况。但是,如果您使用的是globals,那么您可能应该重新考虑您的设计 对于引用,现在设置变量
=NULL
和使用unset()
=NULL
遵循引用,unset()
不:
$a = 'a';
$b = &$a;
unset($b); // $a == 'a'
$a = 'a';
$b = &$a;
$b = NULL; // $a == NULL
[]
底线:
引用允许没有它们就不可能实现的事情,但由于PHP是如何构建的,因此有时候它们的行为方式与人们期望的不一样。尽管PHP中没有“指针”,但您可以传递“引用”:。e、 g
功能测试(&$param1)
将允许在函数中修改$param1
。我已更新我的答案^。