• php弱类型语言中的类型判断


    1、php一个数字和一个字符串进行比较或者进行运算时,PHP会把字符串转换成数字再进行比较。PHP转换的规则的是:若字符串以数字开头,则取开头数字作为转换结果,若无则输出0。

    例如:123abc转换后应该是123,而abc则为0,0==0这当然是成立的.具体可以参考官方手册:如果比较一个整数和字符串,则字符串会被转换为整数

    $a = ($b=4)+5;
    echo $a;   //9
    echo '<p>';
    var_dump(1=='1a');    //true
    echo '<p>';
    var_dump(1=='2a');    //false
    echo '<p>';
    var_dump(1=='a1');    //false
    echo '<p>';
    var_dump("1"=='1a');    //false
    echo '<p>';
    var_dump('51a'+6);    //57
    echo '<p>';
    var_dump('a51'+6);    //6

    2、在PHP中,== 会先进行类型转换,再进行对比,而===会先比较类型,如果类型不同直接返回不相等,参考如下示例

    $a = null;
    $b = '';
    $c = 0;
    echo ($a == $b) ? 1 : 0;    // 输出1
    echo ($a === $b) ? 1 : 0;   // 输出0
    echo ($a == $c) ? 1 : 0;    // 输出1
    echo ($a === $c) ? 1 : 0;   // 输出0
    echo ($b == $c) ? 1 : 0;    // 输出1
    echo ($b === $c) ? 1 : 0;   // 输出0

    3、php中的empty和isset函数

    1)变量为:0,"0",null,'',false,array()时,使用empty函数,返回的都为true
    2)变量未定义或者为null时,isset函数返回的为false,其他都未true
    $a = null;
    $b = '';
    $c = 0;
    $d = "0";
    $e = false;
    $f = array();
    var_dump(empty($a));   //true
    echo '<p>';
    var_dump(empty($b));   //true
    echo '<p>';
    var_dump(empty($c));   //true
    echo '<p>';
    var_dump(empty($d));   //true
    echo '<p>';
    var_dump(empty($e));   //true
    echo '<p>';
    var_dump(empty($f));   //true
    echo '<p>';
    
    var_dump(isset($a));   //false
    echo '<p>';
    var_dump(isset($b));   //true
    echo '<p>';
    var_dump(isset($c));   //true
    echo '<p>';
    var_dump(isset($d));   //true
    echo '<p>';
    var_dump(isset($e));   //true
    echo '<p>';
    var_dump(isset($f));   //true
    echo '<p>';
    var_dump(isset($g));   //false

    4、使用strpos之类的函数要用恒等于来判断

    $sms = "abc";
    
    if(strpos($sms,'a') != false ){
        echo 1;
    }else{
        echo 2;
    }

    这种情况,很明显是判断abc字符串中,是否包含a,预期结果应该是要输出1的,实际结果输出为2。这是因为strpos函数匹配不到目标字符串时,返回false,匹配到了目标字符串时,会返回目标字符串,在搜索字符串中的索引位置,此处返回了0。

    $sms = "abc";
    
    if(strpos($sms,'a') !== false ){
        echo 1;
    }else{
        echo 2;
    }

    改成恒等于,才是正确的。

    5、换行需要双引号

    $time = date('Y-m-d H:i:s').'
    ';
    file_put_contents('filename.txt', $time , FILE_APPEND);

    如果这样写,打开文件是这样的2016-09-02 08:04:04 2016-09-02 08:04:05 2016-09-02 08:04:05 2016-09-02 08:04:05 2016-09-02 08:04:22

    正确的写法是 ,使用双引号包起来

  • 相关阅读:
    【USACO18JAN】MooTube G
    【JSOI2008】星球大战
    【ECF#87】小结
    【NOIP2013】火柴排队
    【USACO04OPEN】MooFest G
    【NOI OL #2】T3 游戏
    【NOI OL #2】T2 子序列问题
    简单NLT
    python中的位运算
    列表和元组
  • 原文地址:https://www.cnblogs.com/kangjianrong/p/5830843.html
Copyright © 2020-2023  润新知