mumudontcry 发表于 2017-2-26 22:47:58

【php包教不包会系列7】PHP 类型之布尔类型

本帖最后由 mumudontcry 于 2017-2-27 01:41 编辑

写在前面

这一个星期有点事情,可能会发得晚一点,但是一个星期三篇的会继续

类型介绍其实不必要分那么细,毕竟像 PHP 这种弱类型的语言……因为有些坑还是需要注意,所以会根据篇幅调整内容

类型

PHP 支持 8 种原始数据类型。

标量类型

boolean:布尔类型
integer:整型
float:浮点型,也为double
string:字符串

复合类型

resource:资源
null:无类型

为了以后代码易读性,再介绍一些伪类型

mixed:混合类型,当你函数里的参数可能是多种类型时,可以用这个表示
number:数字类型,可能是字符串或者整数或者浮点数,总之你一眼看过去,觉得像数字的就是了
callback:回调类型,像 PHP 的一些函数可以传递函数进去的,那么这个参数就是这种类型
$... :伪变量

历史原因,double 和 float 是一样的

变量的类型由上下文运行时决定,这个和其他语言不一样,如 `$var` 可以成为任何一种类型
<?php

$var = 1; // integer
$var = '1'; // string
$var = ; // array
$var = null; // null

要查看变量的值和类型,使用 `var_dump()` 函数

要得到一个变量的类型用于调试,使用 `gettype()` 函数

要查看某个类型,使用 `is_` 函数,如 is_int等
<?php

$bool = true;
echo gettype($bool);
var_dump(is_int($bool));

如果要将一个变量强制转换为某类型,可以对其使用强制转换或者 `settype()` 函数

以上是关于 PHP 类型的介绍,下面我们开始讲 PHP 的第一个类型,布尔类型

PHP 的强制转换机制摆在那里,所以,布尔类型其实有很多需要注意的地方

布尔类型

表示真假,只有两个值:`true` 和 `false`,不区分大小写,规范是小写 参考:https://laravel-china.org/topics/2079#2.5.-关键字-以及-True/False/Null
<?php

$bool = true;

转化成布尔值

使用 `(bool) ` 或者 `(boolean)` 来强制转换,在当作运算符、函数或者控制流程结构需要一个布尔参数时,会被自动转换

转换后被认为是 `false` 的值

- false

- 0

- 0.0

- ''

- '0'

- []

- 仅 PHP 4.0 可用:不包含任何成员变量的对象

- null

- 从空标记生成的 SimpleXML 对象

其他值被认为是 true (包括任何资源)

你可以从这张表中看到更加具体的类型例子,由于表格内容过多,这里放传送门:http://php.net/manual/zh/types.comparisons.php

一些注意事项

1、永远不要使用 `or` `and` `not` 运算符,因为它们和 `||` `&&` `!` 不等价,前者优先级比赋值号 `=` 小,因此你可能会得到下面的两种结果
<?php

$bool1 = false or true; // false
$bool2 = false || true; // true

这个我在概览里已经提到过,布尔值常常用来在我们一些控制语句(比如 if 里)的表达式出现,而我们在表达式中禁止使用英文单词的运算符!这个一定要记住!

2、PHP 喜欢数字,因此,任何与数字对比的字符串都会让字符串强制转换成数字,除非你使用全等于 `===` 或者 `!==`
<?php

$bool1 = 0 == 'string'; // true
$bool2 = 0 === 'string'; // false

3、`0.0` 会被认为是 `false`,但是 `0.00` 却不会!这很可能发生在你的数据库字段是 `DECIMAL` 或者 `CURRENCY` 类型时,因此判断是不是为空时不仅仅是强制转化成布尔类型,这时最好使用 `empty`
<?php

$num = 0.00;
$bool1 = empty($num); // true,注意不能直接写成 empty(0.00),这个你可以试一下
$bool2 = $num == 0; // true

4、如果直接 echo 布尔值,`true` 会得到 `1`,而 `false` 什么也不会输出

这个意味着,布尔值真的,真的,真的不是1和0!!!因此也不要以为 PHP 会给你的 true 输出 1,你就把它当作 1,因为我上面说过了,PHP 喜欢数字,它会尽可能让一些东西看起来像数字,但是布尔值就是布尔值,是独特的一种类型,是为了表示真或者假的类型!
<?php

echo true; // 1
echo false; // 什么都……没有,在光滑的地板上,摩擦,都没有……
echo (int)false; // 0

5、使用 `!!` 也可以进行强制转换
<?php

$bool1 = !!'string'; // true
$bool2 = !!'0'; // false

6、几个关于布尔值使用的额外建议!

如果你单纯想要表示,这个东西是不是空的,比如,数字0,或者字符串0,就是表示什么也没有嘛!那么,如果你是想要表达这个含义,那么请使用empty结构(注意,是结构,因为这个东西喵的并不是函数!尽管和函数使用方式是一样的),在你对表达式中变量类型模糊不定或者类型不需要严格的时候尤其有用!

如果可以,请使用全等于或者全不等于,而且把已知的一边放在前面,比如“1 === $var”,这样防止你少了等于号,变成了赋值语句

作业

使用表格的函数,写代码自己测试结果:http://php.net/manual/zh/types.comparisons.php

例如
<?php

var_dump($x = "");

这是表格的第一个例子,把遇到的问题反馈给我,我认为真的尝试过的人是可以发现问题的!

#################### 华丽的 PHP 版分割线 ####################


如果喜欢木木的讲解,就点击下方的订阅(读作:打赏),给木木点个赞吧,欢迎大家提出建议或者指正

一块钱买不了皮肤,买不了香烟,却可以跟着木木一起打怪升级,并给木木巨大的支持,有了大家的力量,木木就可以制造元气弹,打败……嗯,买一个好一点的女朋友啦

shark_cf 发表于 2017-2-28 11:48:19

沙发。。写的不错,支持一下。

awice 发表于 2017-3-1 19:57:33

对新手来说这课程看不懂!

Kilovolt 发表于 2017-3-4 00:49:13

讲讲php常用框架使用 {:10_279:}

569529989 发表于 2017-3-5 13:23:49

后期可以考虑讲讲Yii框架撒~~会一直关注哒~

mumudontcry 发表于 2017-3-5 20:25:16

569529989 发表于 2017-3-5 13:23
后期可以考虑讲讲Yii框架撒~~会一直关注哒~

嗯嗯~~
页: [1]
查看完整版本: 【php包教不包会系列7】PHP 类型之布尔类型