提问人:Brendan Falkowski 提问时间:12/2/2015 最后编辑:Brendan Falkowski 更新时间:12/2/2015 访问量:123
PHP:长篇的双重赋值是什么样子的?
PHP: what does a double assignment look like in longform?
问:
我什至不知道如何谷歌这个。这个PHP语句怎么写成长篇?
$recentlyViewed = $products = $this->getRecentlyViewedProducts();
像这样的优化让专家觉得自己很聪明,而初学者则觉得自己很愚蠢。我很确定我明白结果是什么,但也许我错了。
答:这是等价的吗?
$products = $this->getRecentlyViewedProducts();
$recentlyViewed = ($products) ? true : false;
B:这是等价的吗?
$products = $this->getRecentlyViewedProducts();
$recentlyViewed = $products;
哪个是对的?
通过 Twitter,似乎 B 是等价的。
公共服务公告
编写非常简单的代码。不要耍小聪明。
答:
等价物是这样的
$products = $this->getRecent();
$recentlyViewed = $products;
我不确定那里的测试是否有意义,因为双重赋值不会返回布尔值。$products
请参阅此处原始类型和对象之间的区别。
多个变量赋值是通过值还是引用完成的?
评论
if
true
false
$recentlyViewed = $products = $this->getRecentlyViewedProducts();
和
$products = $this->getRecentlyViewedProducts();
$recentlyViewed = ($products) ? true : false;
我认为这是等价的:
不,它不是等价的。
让我们看看区别
$recentlyViewed = $products = range(1,10);
因此,如果您,则该值将为print_r
print_r($recentlyViewed);
print_r($products);
这将打印两个数组,但[1,2,3,....10]
$products = range(1,10);
$recentlyViewed = ($products) ? true : false;
因此,如果您打印 然后结果将是第一个打印一个,另一个将打印。$products
$recentlyViewed
array
1
那么相当于什么
$recentlyViewed = $products = $this->getRecentlyViewedProducts();
将是
$products = $this->getRecentlyViewedProducts();
$recentlyViewed = $products;
当你写的时候:
$recentlyViewed = $products = $this->getRecentlyViewedProducts();
PHP所做的是从右手乞求,并将最正确的值分配给左侧变量(如果有的话)。此值可以是常量值(即字符串或数字)、另一个变量或函数的返回值(在本例中)。因此,以下是步骤:$this->getRecentlyViewedProducts()
- 计算 $this->getRecentlyViewedProducts() 的返回值
(
in this case)
- 将计算值分配给
$products
- 分配给
$product
$recentlyViewed
因此,如果我们假设您的函数在执行结束时返回“Hello Brendan!”,则两者将具有相同的值。getRecentlyViewedProducts
$products
$recentlyViewed
在 PHP 中,变量类型是隐式的,因此您可以直接在如下语句中使用它们:if
if($recentlyViewed)
{
...
}
在这种情况下,如果设置了它,并且它的值是 ,或者 ,你的条件将满足。
在PHP中使用非布尔值作为检查条件是很常见的,无论如何,如果你只是作为一个标志使用,为了代码的可读性和内存优化,最好这样做(注意,如果你的函数返回一个大字符串,那么在单独的变量中复制它的值,把它作为一个标志使用,这不是一个明智的选择):$recentlyViewed
$recentlyViewed
0
false
null
if
$recentlyViewed
$recentlyViewed = $products ? true : false;
或
$recentlyViewed = $products ? 1 : 0;
尽管如此,结果不会有所不同。
上一个:影响运算符
下一个:PHP 中的逻辑赋值运算符
评论
$products = $this->getRecentlyViewedProducts(); $recentlyViewed = $products;
$this->getRecentlyViewedProducts()
$recentlyViewed = $this->getRecentlyViewedProducts() ? : 'other_value';