遇到这段代码:
<?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();
感谢。
答案 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')
会产生0
或1
,分别会计算为false
和true
。
答案 3 :(得分:1)
功能A,如果失败则执行功能B
你通常可以在mysql_query(“jibberish”)上看到这个或者死掉('mysql无法运行查询');
答案 4 :(得分:1)
在您的情况下,如果session.auto_start设置为true,则不执行任何操作。否则,开始会议。
OR b检查a是否为真,如果不是则执行b。
所以基本上,这意味着,只有在默认情况下没有启动时启动会话。