有谁知道 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和empty呢?无论评估是真是假,他们似乎都会给我通知。
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');
为冗长的问题道歉。这似乎微不足道,但如果不需要通知就可以快速定义常量!对于此类琐碎任务的任何解释或更好的解决方案将不胜感激,谢谢!