有没有人知道译者如何解释isset和empty,或者译者如何处理未定义的变量?
为了扩展我的问题,我的包含文件中包含以下代码:
define('USER_AUTH', !empty($_SESSION['username']) && !empty($_SESSION['status'])); //user is verified
define('ACC_IS_PENDING', $_SESSION['status'] == '0');//checks to see if user status is pending which has a status of 0
USER_AUTH用作快速检查用户是否经过身份验证的方法。 ACC_IS_PENDING用作帐户状态待处理时的快捷方式。但是,PHP给了我一个通知,告诉我第二行代码中的$ _SESSION ['status']是未定义的。我知道它是未定义的,但我还没用过它!你怎么敢告诉我我已经知道的事情。大声笑
但是,当我用下面的代码欺骗代码时:
define('USER_AUTH', !isempty($_SESSION['username']) && !isempty($_SESSION['status']));
define('ACC_IS_PENDING', $_SESSION['status'] == '0');
其中isempty()是一个自定义函数,它总是返回FALSE。然后没有通知! 或者,如果我使用以下代码:
define('USER_AUTH', notempty($_SESSION['username']) && notempty($_SESSION['status']));
define('ACC_IS_PENDING', $_SESSION['status'] == '0');
其中notempty()始终返回TRUE,然后再次没有通知。
我是否正确地说翻译人员检查变量是否已经过测试一次,如果测试结果为真,那么翻译人员会看到变量已被定义?
如果是这种情况,那么isset和空呢?无论评估是真还是假,他们似乎都给了我通知。
define('USER_AUTH', isset($_SESSION['username']) && isset($_SESSION['status']));
define('ACC_IS_PENDING', $_SESSION['status'] == '0');
和
define('USER_AUTH', empty($_SESSION['username']) && empty($_SESSION['status']));
define('ACC_IS_PENDING', $_SESSION['status'] == '0');
为冗长的问题道歉。这看起来微不足道,但是如果有一个快速定义的常量而不必得到通知会很好!感谢任何帮助解释或更好地解决这些琐碎的任务,谢谢!
答案 0 :(得分:1)
PHP抱怨因为数组中没有定义索引'status'。你需要写
!isset($_SESSION['status']) || empty($_SESSION['status']
当您按照描述“欺骗”代码时,PHP将永远不会尝试访问不存在的数组索引,这就是您没有注意到的原因。
在第四个代码示例中(使用isset),您仍然在第二行代码中访问不存在的数组索引,因此我怀疑这仍然是一个通知的原因。
答案 1 :(得分:1)
a)如果你想使用$ _SESSION ['status'],你必须首先检查变量是否为空(有关详细信息,请参阅http://www.php.net/manual/fr/function.isset.php):
if (isset($_SESSION['status'])) {
// here the value exists and can be used
Do something...
} else {
// here the value does not exist and cannot be used
}
b)我相信
empty($_SESSION['username']) && !empty($_SESSION['status'])
不是常数:它从一次运行到另一次运行会有所不同。您可能想要使用
$user_is_logged = empty($_SESSION['username']) && !empty($_SESSION['status']);
并使用变量$ user_is_logged而不是常量。有关常量的详细信息,请参阅本节http://www.php.net/manual/fr/language.constants.php。