php中的弱语言类型

作者: 宋 帅杰 分类: php 发布时间: 2018-09-04 22:26

阅读本文前,大家可以预测以下脚本输出的内容

<?php
echo 'a1sdf' == 1 ? 1 : 0;
echo PHP_EOL;
echo 1 == '01adfe' ? 1 : 0;
echo PHP_EOL;
echo 1.0 == '1.dwd0' ? 1 : 0;
echo PHP_EOL;
echo 1.1 == '1.wef1' ? 1 : 0;
echo PHP_EOL;
echo 1.1 == '1.1wef1' ? 1 : 0;
echo PHP_EOL;
echo 1.0 === 1 ? 1 : 0;
echo PHP_EOL; 
echo 1.0 == 1 ? 1 : 0;
echo PHP_EOL;

 

php是若类型语言,所以在进行两值的比较运算时有以下要点:

  1. == 只会比较两个变量的值
  2. === 比较变量的类型和值

使用 == 进行比较运算时注意如下:

  1. 如果比较中的变量有一个是布尔类型,那么所有参与的变量都会被转换为布尔类型,然后进行比较
  2. 如果比较的变量中有一个是浮点数,那么所有参与的变量都会先被转换为浮点数,然后进行比较
  3. 如果比较的变量中有一个是整数,那么所有参与的变量都会先被转换为整数,然后进行比较
  4. 如果比较中的变量没有数字,但又字符串,那么所有参与的变量会先被转换为字符串,然后进行比较
  5. 比较变量中不能都是实例化对象

如果比较变量中有实例化对象,那么会根据上述规则调用相应的魔术方法,将对象转换为相应类型,然后进行比较。如果对象中没有相应的魔术方法,那么将会引发 PHP Recoverable fatal error 报错。

例如,如果将实例化对象和字符串比较,那实例化对象会先检查是否有__toString()函数,如果没有报错,如果有将该方法返回的值与字符串进行比较

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注

标签云