php中 0与字符串的比较

先说一个例子,今天群里的一个朋友遇到一个问题,使用switch出现的问题。下面是代码:


<?php namespace test; class GDefine { const ZERO = 0; const ONE = 1; const TWO = 2; const THREE = 3; const A_TYPE = 'a'; const B_TYPE = 'b'; const C_TYPE = 'c'; } class test { public function __construct() { $data = [ 'name' => 'hardy', 'university'=> 'huaruan', 'hometown' => 'zhanjiang', 'salary' => '5K' ]; $arr = $this->get_data($data,'c'); echo "<pre>"; var_dump($arr); } public function get_data($data,$type){ switch($type){ case GDefine::ONE: case GDefine::B_TYPE: $data['type'] = 'programmer'; break; case GDefine::ZERO : case GDefine::A_TYPE : $data['type'] = 'worker'; break; case GDefine::TWO: case GDefine::C_TYPE: $data['type'] = 'engineer'; break; default: $data['type'] = 'unemployed'; break; } return $data; } } $test = new test();

输出结果是:

array(5) {
  'name' =>
  string(5) "hardy"
  'university' =>
  string(7) "huaruan"
  'hometown' =>
  string(9) "zhanjiang"
  'salary' =>
  string(2) "5K"
  'type' =>
  string(6) "worker"
}

这个里面我传过去的是字符c为什么$data[‘type’] = ‘engineer’;这个不执行。

这个地方先给大家看一个例子:


<?php $a = 'www.devkang.com'; if ($a == 0) { echo 'false'; } else { echo 'true'; }

输出结果是:

false

以上的结果大家可能会认为肯定输出false,因为字符串肯定不等于0。但是结果却是true。为什么?????

下面来给大家讲一下php的弱类型语言的运算:

当php进行不同类型的变量进行比较时,会首先进行类型的转换,然后再进行比较。

在进行$a与0比较式,会把$a转换成整型来进行比较,结果就是转换成0,所以结果就变成false了。

在switch中,进行比较也是用等于(==)来进行比较,也会进行类型的转换,所以会出现上面的问题。

在做一些数据的比较,如果确定类型一致,尽量使用绝对等于(===),不仅可以比较数值,也可以比较类型,如果类型不一致直接返回false。

本文已经被查看816次

发表评论

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