我甚至不确定如何谷歌这个。如何将这个PHP语句写成longform?
$recentlyViewed = $products = $this->getRecentlyViewedProducts();
这样的优化让专家感到聪明,初学者感到非常愚蠢。我很确定我明白结果是什么,但也许我错了。
$products = $this->getRecentlyViewedProducts();
$recentlyViewed = ($products) ? true : false;
$products = $this->getRecentlyViewedProducts();
$recentlyViewed = $products;
通过Twitter,似乎B是等价的。
写出明显简单的代码。不要聪明。
答案 0 :(得分:2)
$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
,则结果将是第一个' ll打印array
,另一个' ll打印{{1} }。
那么相当于
1
将是
$recentlyViewed = $products = $this->getRecentlyViewedProducts();
答案 1 :(得分:1)
等效于此
$products = $this->getRecent();
$recentlyViewed = $products;
我不确定$products
的测试如何在那里有意义,因为双重赋值不会返回布尔值。
请参阅此处原始类型和对象之间的区别 Are multiple variable assignments done by value or reference?
答案 2 :(得分:0)
当你写:
$recentlyViewed = $products = $this->getRecentlyViewedProducts();
PHP所做的是从右手乞求并将最正确的值分配给左侧变量(如果有的话)。该值可以是const值(即字符串或数字),函数的另一个变量或返回值(在这种情况下为$this->getRecentlyViewedProducts()
)。所以这是步骤:
(
$ this-> getRecentlyViewedProducts()in this case)
$products
$product
分配给$recentlyViewed
因此,如果我们假设您的getRecentlyViewedProducts
函数返回'Hello Brendan!',则在执行结束时,$products
和$recentlyViewed
将具有相同的值。
在PHP中,变量类型是隐式的,因此您可以直接在if
语句中使用它们,如下所示:
if($recentlyViewed)
{
...
}
并且在这种情况下,如果设置了$recentlyViewed
且其值$recentlyViewed
是0
,false
或null
的其他任何内容,则if
条件会满足
在PHP中使用非布尔值作为检查条件是很常见的,无论如何,如果你使用$recentlyViewed
作为标志,为了代码可读性和内存优化,最好这样做(注意你的功能)返回例如一个大字符串,将其值复制到一个单独的变量中以将其用作标志并不是明智的选择):
$recentlyViewed = $products ? true : false;
或
$recentlyViewed = $products ? 1 : 0;
althogh结果不会有所不同。