【问题标题】:$variable OR $variable = $variable in PHPPHP 中的 $variable 或 $variable = $variable
【发布时间】:2016-05-28 21:45:24
【问题描述】:

这是函数中的独立表达式:

$var OR $var = $var

这个表达式到底是做什么的?

以前从未见过,也找不到答案,因为我不知道它是怎么称呼的。

代码本身来自:Сodeigniter Template on Github

public function build($view, $data = array(), $return = FALSE)
{
    // Set whatever values are given. These will be available to all view files
    is_array($data) OR $data = (array) $data;
    // Merge in what we already have with the specific data
    $this->_data = array_merge($this->_data, $data);

...

【问题讨论】:

  • 我会说它没有任何相关性......我们可以看到这个功能吗?
  • $var 应该在代码中出现 3 次吗?
  • Assignment (=) 比OR 具有更高的优先级,所以它给自己设置一个变量值,然后再用它自己 ors ,然后什么都不做......它基本上是就这样浪费处理周期
  • is_array($data) OR $data = (array) $data; 与$var OR $var = $var 不同。你为什么不从一开始就发布呢?
  • 相当于if (!is_array($data)) { $data = (array) $data; }

标签: php variables syntax


【解决方案1】:

给定一个像你这样的表达

is_array($data) OR $data = (array) $data;

我们首先检查http://php.net/operators.precedence 上的优先级表。我们看到= 高于OR。因此该行等于:

is_array($data) OR ($data = (array) $data);

接下来我们必须检查表的关联性。 or 是左关联的,因此它检查 is_array($data)。如果返回true,则or表达式作为一个整体返回true,不会发生其他任何事情。

如果is_array($data) 返回false,我们必须进一步评估,所以$data = (array) $data 被执行。

到底这是一种“聪明”的写作方式

if (!is_array($data)) {
    $data = (array) $data;
}

其实在这种情况下我们也可以只写

$data = (array) $data;

如果$data 已经是一个数组,则(array) 演员表是无操作的。

【讨论】:

    猜你喜欢
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-12
    • 1970-01-01
    • 2022-08-17
    • 2013-07-22
    • 1970-01-01
    相关资源
    最近更新 更多