在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中使用吗?
答案 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 Are,What References Do和What 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的构建方式。