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 或 b] ?

ini_get('session.auto_start') or session_start();

谢谢。

4

5 回答 5

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();
于 2012-06-29T13:01:17.273 回答
2

如果a解析为 PHP 可以转换为的值,trueb不会执行。

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

于 2012-06-29T12:58:34.530 回答
2

这种表达依赖于or作品的方式。它通常用于检查两个布尔值之一是否为真:

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

很酷的是,如果左边的部分or是真的,它永远不会检查后面的部分,因为它不需要。这意味着您可以在or. 如果左侧部分产生负值(解析为 的值false),则将执行右侧部分。如果左边部分产生一个正值,即解析为真,那么右边部分将永远不会被执行。

所以总结一下,这个:

ini_get('session.auto_start') or session_start();

与此相同:

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

因为ini_get('session.auto_start')结果为01,其分别计算为falsetrue

于 2012-06-29T13:01:20.690 回答
1

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

你通常可以在 mysql_query("jibberish") 或 die('mysql couldt run query') 上看到这个;

于 2012-06-29T12:58:05.580 回答
1

在您的情况下,如果 session.auto_start 设置为 true,则什么也不做。否则,开始会话。

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

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

于 2012-06-29T12:58:19.757 回答