回答
随着原料类型两者的值,这是一个拷贝。
test.php的
$a = $b = 0;
$b = 3;
var_dump($a);
var_dump($b);
输出:
int(0)
int(3)
随着虽然目的,是另一回事(PHP 5)
test.php的
class Obj
{
public $_name;
}
$a = $b = new Obj();
$b->_name = 'steve';
var_dump($a);
var_dump($b);
输出
object(Obj)#1 (1) { ["_name"]=> string(5) "steve" }
object(Obj)#1 (1) { ["_name"]=> string(5) "steve" }
你可以自己已经尝试过
$a = $b = 0;
$a = 5;
echo $b;
或
$a = $b = 0;
$b = 5;
echo $a;
(目前我真的不关心:d)
这样:不,它们与价值两个独立变量0
。
在那个例子中,你是不是必须在第二行分配5到$ b来证明引用不存在?是的,你是对的。我认为这里的问题对于其他人来说也很好,但是... – 2011-06-06 19:47:12
@Evil:不想考虑它,所以也加入了其他方法。两者都返回'0',因此它在任何情况下都必须是真实的:) – KingCrunch 2011-06-06 19:49:13
今天我学到了一些东西。它可能很小,但总是很有趣。 – 2011-06-06 19:54:46
关于此代码为:
$a = ($b = 0);
表达$b = 0
不仅分配0
到$b
,但它产生的结果为好。该结果是作业的正确部分,或者仅仅是$b
分配给的值。
因此,$a
也被指定为0
。
其为它们分配的0
我给你推荐这个很好看的:http://terriswallow.com/weblog/2007/multiple-and-dynamic-variable-assignment-in-php/。在评论一个,你可以阅读:
应当注意的是,如果你使用 多重分配在一行到 分配对象,该对象是 参考指派。因此,如果 使用任一变量更改对象的 属性的值,则 值本质上会同时发生变化。
因此,我个人建议您分别分配变量。
为了记录在案:
$a = $b = 4;
var_dump($a, $b);
$b = 5;
var_dump($a, $b);
产量:
int(4)
int(4)
int(4)
int(5)
但是:
class Tmp
{
public $foo;
public function __construct()
{
$this->foo = 'bar';
}
}
$a = $b = new Tmp();
var_dump($a, $b);
$a->foo = 'oth';
var_dump($a, $b);
产量:
object(Tmp)#1 (1) {
["foo"]=>
string(3) "bar"
}
object(Tmp)#1 (1) {
["foo"]=>
string(3) "bar"
}
object(Tmp)#1 (1) {
["foo"]=>
string(3) "oth"
}
object(Tmp)#1 (1) {
["foo"]=>
string(3) "oth"
}
所以结论是没有对基元的引用,但是有一个对象的引用。
我们在一些测试中证明了这个错误。 – 2011-06-06 20:15:50
我已经更新了我的答案。 – 2011-06-06 20:26:16
两个$ a和$ b被赋予0该值如果你想$一个参考$ B,你会用符号抢占它,例如:
$a = & $b = 0;
它取决于你分配什么。
如果您正在分配一个值,则该分配会将原始变量复制到新的值。
例1:
$a = $b = 0;
$b++; echo $a;
上面的代码将返回0
,因为它是按值赋值。
实施例2:
$a = ($b = 4) + 5; // $a is equal to 9 now, and $b has been set to 4.
由内PHP值行为通常的分配的一个例外处理对象,其通过引用在PHP 5自动分配发生。对象可以通过clone关键字显式复制。
实施例3
$a = $b = $c = new DOMdocument();
$c->appendChild($c->createElement('html'));
echo $a->saveHTML();
以上代码将打印<html></html>
。
- 1. 何时完成PHP-MySQL变量赋值?
- 2. 多变量赋值
- 3. JavaScript通过引用或按值赋值数组元素
- 4. Python多变量赋值
- 5. 变量赋值
- 6. Angular4模板引用变量赋值
- 7. 变量赋值之前引用:Python的
- 8. PHP通过引用给变量赋值数组。更改变量会改变数组中的值
- 9. 从另一个变量赋值变量
- 10. 变量赋值输入值
- 11. 是否可以通过使用第二个变量将值赋给变量?
- 12. 通过值或引用
- 13. C#通过引用或值
- 14. Golang变量赋值
- 15. OdiOSCommand变量赋值
- 16. XSL变量赋值
- 17. JavaScript变量赋值
- 18. Jquery:变量赋值
- 19. C#变量赋值
- 20. while循环灵药通过重新赋值给一个变量
- 21. 为VBA中的一个变量赋值多个值以访问
- 22. Listbox.selected索引更改变量赋值
- 23. Smarty为数组变量索引赋值
- 24. 静态成员变量赋值
- 25. 通过完整引用传递变量
- 26. 通过使用文本文件定义新变量和赋值
- 27. 晶体通过参考或值变量
- 28. 的Java风格:多变量赋值
- 29. Python多变量赋值混淆
- 30. 通过赋值给const引用的值返回
请注意,该示例具有误导性:更改对象的属性与更改引用对象的变量不同。因为变量从未改变过,所以当然是相同的。 – KingCrunch 2011-12-30 19:00:51
根据[documentation](http://php.net/manual/en/internals2.variables.intro.php),PHP使用写入系统上的副本。这意味着使用诸如字符串或整数等原始类型真的会在内存中创建更改。这就是为什么,与我们想像的相反,创建引用来优化小变量的性能可能不会带来预期的效果,因为PHP需要在之前创建它。但是,自PHP5以来,对象通过默认引用进行传递。 – bgondy 2013-04-11 17:00:38
通过引用分配对象可以更改为使用'clone'复制分配。EG:'$ a = clone $ b = new Obj;' – fyrye 2016-03-31 21:17:38