有谁知道isset和empty是如何被翻译者解释的,或者翻译者如何处理未定义的变量?常量,isset和空白评估
为了扩大我的问题,我有下面的代码在我的包含文件:
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');
很抱歉没能长篇大论的问题。这看起来微不足道,但如果有一个快速定义的常量而不需要通知,那将是很好的选择!任何帮助解释或更好的解决这种琐碎的任务将不胜感激,谢谢!
我忘了提及自定义函数附加了一个&以确保该变量通过引用传递。像这样: 函数isempty(&$ var){...} – chaser 2012-07-30 11:53:45
为什么不创建一个IF条件来定义某些东西?我认为当它不是这样的时候,它会使事情变得复杂。 – Gntem 2012-07-30 12:10:50