$this->imageH || $this->imageH = $this->fontSize * 2.5的意思

$this->imageH || $this->imageH = $this->fontSize * 2.5;

之前在thinkphp的验证码模块中看到$this->imageH || $this->imageH = $this->fontSize * 2.5,虽然知道了是什么意思,但不知道为什么要这样写,还一直以为这是一个类特有的结构……现在终于搞明白了。居然是一个运算符优先度的问题……
一开始我认为因为赋值运算符'='优先度低于你逻辑运算符'||',所以,$a||$a是什么鬼……
今天才看到**尽管 = 比其它大多数的运算符的优先级低,PHP 仍旧允许类似如下的表达式:if (!$a = foo()),在此例中 foo() 的返回值被赋给了 $a。 **
照此理解,上式以||为分隔符分为前后两个部分。

  • 如果$this->imageH为空,则这部分判断为假,因为是||,所以继续下半部分的赋值运算。
  • 如果$this->imageH有值,则这部分判断为真,然后跳过此句赋值部分。

var name = obj.name || '--';

一眼望过去还以为是和上面的那条一样的。前些日子无意间在php写了类似于下一句,结果……
好吧,这才知道js和php在这块是不一样的。

前一种方法好多种语言都支持,叫“运算符的短路”;后者我在js中见过,还有不明白是怎么回事

posted @ 2017-01-29 13:41  不觉风止  阅读(144)  评论(0编辑  收藏  举报