Php 函数在if语句中执行顺序

Php 函数在if语句中执行顺序,php,if-statement,Php,If Statement,我想为一个“安全”的php页面创建一个函数,用于检查令牌(post传递的令牌和会话传递的令牌)。但我不想编写两个类似这样的if语句: function CheckToken(){ if(isset($_POST['token']) && isset($_SESSION['token'])) if($_POST['token']==$_SESSION['token']) return true; return false; } function

我想为一个“安全”的php页面创建一个函数,用于检查令牌(post传递的令牌和会话传递的令牌)。
但我不想编写两个类似这样的if语句:

function CheckToken(){
    if(isset($_POST['token']) && isset($_SESSION['token']))
        if($_POST['token']==$_SESSION['token']) return true;

    return false;
}
function CheckToken(){
    if(isset($_POST['token']) && isset($_SESSION['token']) && $_POST['token']==$_SESSION['token']) return true;
    return false;
}
function CheckToken() {
    return isset($_POST['token']) &&
           isset($_SESSION['token']) &&
           $_POST['token'] == $_SESSION['token'];
}
我可以这样做吗


这里介绍了这些函数的执行顺序(使用and运算符时)。因此,如果使用and操作数,那么如果第一个条件为false,则不要计算第二个条件。我记得vb.net对这个问题有一个解决方案(如果第一个函数为false,则只对第一个函数求值,不要对第二个函数求值)。
那么,将所有内容放在一行是否安全(就像我在第二个示例中所做的那样)?

是的,这样更改顺序确实没有区别。它是完全安全的,因为它所做的只是在执行完全相同的情况下更改脚本的外观


最好执行第二个选项。

PHP执行与其他主要语言中通常的
if
语句求值相同的操作,即从左到右检查

所以如果你有

if (cond1 && cond2 && cond3)
场景1:
如果
cond1
为真,它将执行
cond2
,然后执行
cond3

样本:

场景2:
如果假设
cond2
false
,则
cond3
将被忽略。
样本:

这同样适用于或

if (cond1 || cond2 || cond3)
如果
cond1
为true,将跳过
cond2
cond3

样本:


因此,由于您的函数只是返回
true
false
,因此您甚至可以将其简化为以下内容:

function CheckToken(){
    if(isset($_POST['token']) && isset($_SESSION['token']))
        if($_POST['token']==$_SESSION['token']) return true;

    return false;
}
function CheckToken(){
    if(isset($_POST['token']) && isset($_SESSION['token']) && $_POST['token']==$_SESSION['token']) return true;
    return false;
}
function CheckToken() {
    return isset($_POST['token']) &&
           isset($_SESSION['token']) &&
           $_POST['token'] == $_SESSION['token'];
}

为便于阅读,请拆分行。也可以使用“签出手册”,因为您可以传入多个变量进行空检查。

我始终坚持使用第一个选项,因为我喜欢分离我的条件。这通常用于诊断问题,并根据状态返回单独的错误消息。但是,如果您不担心将错误返回给用户等,那么任何一个都可以。两人都做同样的事。