Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP函数中使用指针?_Php_Pointers - Fatal编程技术网

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

如何在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中的&运算符表示传

在C中,我们可以使用指针作为函数参数:

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
。我已更新我的答案^。