如何在PHP函数中使用指针?

3
在C语言中,我们可以使用指针作为函数参数:
test( *text);
function test( *txt){
 //codes goes here
}

在 PHP 中是否有可能实现?

1
虽然在PHP中没有'指针',但是你可以传递'引用':你可以将变量作为引用传递给函数,从而使函数能够修改变量。。比如说 function test(&$param1); 可以允许在函数中修改 $param1 - Ryan Vincent
2个回答

3

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的引用。
这个页面有关于指针的很好的解释。

我已经更新了我的回答 ^^。 - Maraboc

1

有引用,但那不是指针。

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 语言本身的特性,它们并不表现出人们期望的行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接