PHP: "a or b"表达式的含义是什么?

4

我看到了这段代码:

<?php
require_once 'HTTP/Session/Container/DB.php';

$s = new HTTP_Session_Container_DB('mysql://user:password@localhost/db'); 

ini_get('session.auto_start') or session_start();  //HERE. ?? 

?>

这种 PHP 表达式 [a OR b] 是什么意思?
ini_get('session.auto_start') or session_start();

感谢您的选择。

if (!ini_get('session.auto_start')) session_start(); - k102
5个回答

3
关键字or是“逻辑或”运算符,相当于||:
if ($x < 0 or $y < 0) // the same as:
if ($x < 0 || $y < 0) 
< p > or 的一个特性是,如果第一个操作数返回 true,则不会评估第二个操作数:

  if (!isset($var) || $var === null)
#                     ^^^^^^^^^^^^^
#                     This code is never run if !isset($var) returns false.

这个功能可以(被滥用)用于编写“执行某些操作或处理错误”代码:
  do_something() or handle_error()
# ^^^^^^^^^^^^^^
# If do_something() returns true, there is no error to handle, 
# and handle_error() is never executed.

下面是更加清晰的写法,使用显式的 if

if (!do_something())
    handle_error();

我不同意这种使用“或”运算符的方式是滥用,因为它实际上非常易读。“要么成功地做x或者做y”。 - Hubro
这被称为短路求值。许多编程语言都支持它。 - Joe Flynn

2

如果a解析为PHP可以转换为true的值,则b不会被执行。

它可以用作if( !a ) b的快捷方式。


2

这种表达方式基于or的工作原理。通常用于检查两个布尔值中是否至少有一个为真:

$foo = true or false // true
$foo = false or false // false

很酷的是,如果or的左侧为真,则不需要检查后面部分。这意味着您可以在or的每一侧放置一个表达式。如果左侧结果为负值(解析为false的值),则将执行右侧部分。如果左侧结果为正值(解析为true的值),则右侧部分将永远不会被执行。
因此,总结一下,如下所示:
ini_get('session.auto_start') or session_start();

等同于这个:

if(!ini_get('session.auto_start')) session_start();

因为 ini_get('session.auto_start') 的结果要么是 0 要么是 1,分别对应 falsetrue


1

如果函数A失败,请执行函数B。

通常可以在mysql_query("jibberish")或die('mysql无法运行查询')中看到此操作。


1

在您的情况下,如果session.auto_start设置为true,则无需执行任何操作。否则,请启动会话。

a或b检查a是否为真,如果不是则执行b。

因此,基本上意味着仅在默认情况下未启动会话时才启动会话。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接