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

时间:2015-05-16 10:34:59

标签: php pointers

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

UPDATE `monthly_salary` salary
JOIN    `employee`      employee    ON employee.empid=salary.emp_id
SET     salary.total_salary=employee.salary_amt - employee.medical_allownces - employee.pension

可以在PHP中使用吗?

2 个答案:

答案 0 :(得分:2)

PHP中的变量名称以$开头,因此$entryId是变量的名称。 $this是PHP中面向对象编程中的一个特殊变量,它是对当前对象的引用。

->用于访问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的引用。

关于此page

的指针有一个很好的解释

答案 1 :(得分:1)

有引用,但 与指针相同。

php.net有多个页面解释What References AreWhat References DoWhat References Are Not 也有,多次提到

  

引用不是指针。

他们提供了一种将$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之前,还可以做一个名为" call-time pass-by-reference"的事情,你将有一个" normal"函数声明并在调用中使用&运算符:

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'

[Demo]

由此产生的陷阱与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

[Demo]

底线:

引用允许没有它们的情况下可能发生的事情,但有时不会按照人们期望的方式行事,因为PHP的构建方式。