PHP中的null常数,关于php:常数,isset和空评估

有谁知道翻译器如何解释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,则再次没有通知。

我的意思是,翻译器检查该变量是否已经测试过一次,并且如果测试结果为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');

对于长期存在的问题,我们深表歉意。这看似微不足道,但拥有一个快速定义的常量而无需通知就很好了!谢谢您对这种琐碎任务的解释或更好的解决方案,谢谢!

我忘了提到自定义函数后附有&,以确保变量通过引用传递。 像这样:function isempty(&$ var){...}

为什么不做IF条件以便define? 我认为您做的事情太复杂了。

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。

谢谢您的意见。我感到非常困惑,因为我认为第一行代码和第二行代码之间存在某种关系(请参阅我的其他评论)。当我欺骗第一行代码时,它停止了第二行代码的通知。因此,我感到困惑。我现在知道这与常量无关,而是PHP如何以自上而下的方式解释我的代码。看,我以为常数在被引用时就被评估了。但是,事实并非如此,PHP一旦获取代码,就会对其进行评估。谢谢!

如果您想在编写常量时对其求值,那么我认为函数是更好的选择。

PHP抱怨,因为未在数组中定义索引"状态"。 你需要写

!isset($_SESSION['status']) || empty($_SESSION['status']

当您"欺骗"所描述的代码时,PHP将永远不会尝试访问不存在的数组索引,这就是为什么您不会得到任何通知的原因。

在第四个代码示例(带有isset)中,您仍然在第二行代码中访问不存在的数组索引,因此我怀疑这就是为什么仍然有一个提示。

实际上,根据php.net/manual/en/function.empty.php上的文档,即使变量不存在,empty()语言构造也不会发出警告,因此,请仔细检查isset()和empty ()不需要。

@Andreas,谢谢您的投入。您说的如何欺骗PHP使其不在不存在的数组索引中查找的内容使您有点不高兴!所以我去用我的代码做更多的测试。因为我想知道为什么第一行代码(被欺骗时)阻止了第二行代码的通知。我很困惑。因此,当我欺骗PHP时,它继续进行操作并将该变量定义为null,因此在我第一次欺骗它之后,这些通知就再也不会困扰我。有了isset和empty函数,它就永远不会以这种方式开始工作!感谢您让我意识到这一点。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值