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


Function executing order in an if statement php

我想为一个"安全"的php页面创建一个函数,该页面将检查令牌(通过post传递的令牌和来自会话的令牌)
 nbsp nbsp 但我不想写这样的两个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;
}

 nbsp nbsp 以下是这些函数的执行顺序(使用and运算符时)。因此,如果使用and操作数,则如果第一个条件为false,则不要计算第二个条件。我记得vb.net有一个解决这个问题的方法(如果第一个函数为false,只计算第一个函数,不要计算第二个函数)
 nbsp nbsp;那么,把所有东西都放在一行上安全吗(就像我在第二个例子中所做的那样)?

PHP执行与其他主要语言中常见的if语句评估相同的操作,即从左到右进行检查。

所以如果你有

if (cond1 && cond2 && cond3)

场景1:
如果cond1为真,则它将执行cond2,然后执行cond3
样品:https://3v4l.org/Ap9SQ

场景2:
如果假设cond2false,那么cond3将被忽略
样品:https://3v4l.org/u9P4O

OR 也是如此

if (cond1 || cond2 || cond3)

如果cond1为真,则将跳过cond2cond3
样品:https://3v4l.org/ZAZcD


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

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

拆分行以提高可读性。也可以签出isset手册,因为您可以传入多个变量进行空检查。

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

最好做第二种选择。