PHP:“a或b”表达式是什么意思?

时间:2012-06-29 12:56:06

标签: php

遇到这段代码:

<?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();

感谢。

5 个答案:

答案 0 :(得分:3)

关键字or是“逻辑或”运算符,相当于||

if ($x < 0 or $y < 0) // the same as:
if ($x < 0 || $y < 0) 

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();

答案 1 :(得分:2)

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

它可以用作if( !a ) b

的快捷方式

答案 2 :(得分: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')会产生01,分别会计算为falsetrue

答案 3 :(得分:1)

功能A,如果失败则执行功能B

你通常可以在mysql_query(“jibberish”)上看到这个或者死掉('mysql无法运行查询');

答案 4 :(得分:1)

在您的情况下,如果session.auto_start设置为true,则不执行任何操作。否则,开始会议。

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

所以基本上,这意味着,只有在默认情况下没有启动时启动会话。