• 字符串在PHP比较运算中的变化


    由于PHP的弱类型性质,你可以做一些奇怪的事情,其中​​一些是好的,其中一些将使你掉到坑里面去。比如:

     echo '1' + 5;

    在某些语言中,这可能会导致程序崩溃,但PHP会尝试将任何字符串计算为整数。在这种情况下,它将字符串转换为整数1,并将其添加到5以生成6。

    顺便说一句,如果你在JavaScript中这样做,那么你会发现相反的结果。因为连接字符与添加字符相同,如果任何当前值是字符串,JavaScript将始终尝试截断该值。所以JavaScript中的结果将是“15”。

    如果我们将字符串更改为字符串“one”然后执行相同的操作,则结果为5。

    echo 'one' + 5;

    这是因为如果PHP无法将字符串转换为整数,则假定它为0。

    我们可以通过比较将其提升到另一个层次。查看PHP类型比较表,您可以看到有两种不同的方法可以比较两个值。

    请看下面的代码片段。期待这个结果会是什么?

    1. $a = 'string';
    2. $b = 0;
    3.  
    4. if ( $a == true && $b == false && $a == $b ) {
    5. }

    那么答案是程序会退出,因为所有这些比较都是正确的。

    'a string'== true等于true,因为如果与布尔值进行比较,PHP会将任何非空字符串计算为true。

    0 == false等于true,因为与布尔值比较时,整数0被计算为false。

    'a string'== 0也计算为true,因为与整数相比,任何字符串都会转换为整数。如果PHP无法正确转换字符串,则将其计算为0.因此0等于0,等于为真。

    要解决此问题,您可以使用===运算符代替==运算符。此运算符(也称为三重等于运算符)仅在两个值具有相同值时才会求值为true,如果它们是相同类型,则仅计算为true 。因此,如果我们将示例更改为使用三等于运算符,则所有项都将计算为false。这是因为字符串不能是布尔值,整数不能是布尔值,字符串不等于整数。

    两个等于运算符之间的差异很重要。每个都有它自己的用途,但如果你对你的价值类型有任何疑问,那么使用三等于运算符,特别是当通过测试会给你的程序带来灾难。

    使用strpos()等函数时,三重等于运算符是必不可少的。这是因为在找不到字符串时它将返回false。如以下示例中$position变量等于false。

    $position = strpos('abcd','z');

    但是如果在0位找到字符串会发生什么?如果您使用了双等于运算符,那么您将发现您的位置将等于false。

    if (false !== strpos('abcd','a')) {
    echo 'found';
    } else {
    echo 'not found';
    }
  • 相关阅读:
    20145322《信息安全系统设计基础》第13周学习总结
    20145310《信息安全系统设计基础》实验五 网络通信
    《信息安全系统设计基础》实验四 外设驱动程序设计
    《信息安全系统设计基础》实验二 固件设计
    《信息安全系统设计基础》实验三报告
    20145321《信息安全系统设计基础》第14周学习总结
    20145321 《信息安全系统设计基础》第13周学习总结
    《信息安全系统设计基础》实验五报告
    20145321 《信息安全系统设计基础》第12周学习总结
    《信息安全系统设计基础》实验四报告
  • 原文地址:https://www.cnblogs.com/baocheng/p/11454156.html
Copyright © 2020-2023  润新知