波哥教你学PHP7之三:PHP数据类型

类型

PHP一共有如下类型:

  1. Boolean 布尔类型
  2. integer 整型
  3. float 浮点型,也称作 double
  4. string 字符串
  5. array 数组 PHP里用得最多的类型,一定要掌握
  6. object 对象
  7. callable(可调用)
  8. resource(资源)
  9. NULL(无类型)

在PHP手册里,还有一些伪类型,这些是为了方便阅读代码。

  1. mixed(混合类型)
  2. number(数字类型)
  3. callback(回调类型,又称为 callable)
  4. array|object(数组 | 对象类型)
  5. void (无类型)

Boolean 布尔类型

布尔类型只有两个值,常量 TRUE 或 FALSE。两个都不区分大小写。

<?php
/* example_06.php */

$isReady = true; /* 一般来说布尔类型建议用 is 来开头 */

if ($isReady) {
    echo "我准备好了。\n";
} else {
    echo "再给点时间准备吧。\n";
}

$isRich = 1; // 大家可以把 $isRich 设置成 "", -1, 2.333, null, "false" 自行测试一下。

if ($isRich) { // 这里会有一个隐性转换,会把 $isRich 由 1 转成 true
    echo "我是一个富人。\n";
} else {
    echo "我好穷呀。\n";
}

$isOld = 1;
if ($isOld === true) { // 这里是三个等于号,必须类型还有值都一样才能相等,1虽然等于 true 但类型一个是int 一个是布尔 就不相等
    echo "我老了。\n";
} else {
    echo "我还年轻。\n";
}

/** 重要 **/
var_dump((bool) false);     // bool(false)
var_dump((bool) 0);         // bool(false)
var_dump((bool) 0.00);      // bool(false)
var_dump((bool) "");        // bool(false)
var_dump((bool) "0");       // bool(false)
var_dump((bool) array());   // bool(false)
var_dump((bool) []);        // bool(false)
var_dump((bool) null);      // bool(false)
var_dump((bool) "00");      // bool(true)
var_dump((bool) "0.0");     // bool(true)
var_dump((bool) -1);        // bool(true)
var_dump((bool) 1);         // bool(true)
var_dump((bool) "abc");     // bool(true)
var_dump((bool) 2.3e5);     // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) [12]);      // bool(true)
var_dump((bool) NAN);       // bool(true)

// 类型判断
var_dump(is_bool($isRich)); // bool(false)
var_dump(is_int($isRich));  // bool(true)

在Sublime Text 3 下执行结果如下:

我准备好了。
我是一个富人。
我还年轻。
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(true)
bool(false)
bool(true)

if 语句就是布尔类型使用较多的场景,只要 if 括号里的条件为true,那么就执行相关的语句。
使用 var_dump 可以打印出各种类型。

if ($isReady) { // 相当于 if ($isReady == true) 的简写
if ($isRich) { // 这里会有一个隐性转换,会把 $isRich 由 1 转成 true 相当于 if ((bool) $isReady)
if ($isOld === true) { // 这里是三个等于号,必须类型还有值都一样才能相等,1虽然等于 true 但类型一个是int 一个是布尔 就不相等
var_dump((bool) ""); // 中的 (bool) 表示强制把 "" 转换成 bool 类型
is_bool() 和 is_int 都是类型判断函数,返回值为 布尔类型

Integer 整型

Integer 整型,就是初中数学里定义的整数,有正负之分。
有二进制、八进制、十进制、十六进制等几种方法来表示整数,前面可以正号(+)负号(-)。

  1. 二进制 用0和1来表示一个数字 数字前加 0b 例如 0b101 -0b101 0b后面只有0和1
  2. 八进制 用0-7来表示一个数字 数字前加 0 例如 0123 -0123
  3. 十进制 用0-9来表示一个数字 123 -123
  4. 十六进制 用0-9加ABCDEF来表示一个数字 数字前加 0x 例如 0x1F -0x1F
    在32位系统和64位系统里,Integer类型的最大最小值是不一样的。在特殊情况下,要注意数据越界溢出。
<?php
/* example_07.php */

$a = 1234; // 十进制 1234
$b = 0b10011010010; // 二进制 1234
$c = 02322; // 八进制 1234
$d = 0x4d2; // 十六进制 1234

// var_dump 可以同时打印多个变量
var_dump($a, $b, $c, $d);

// 十进制转成二进制字符串
var_dump(decbin($a)); // string(11) "10011010010"
// 十进制转成八进制字符串
var_dump(decoct($a)); // string(4) "2322"
// 十进制转成十六进制字符串
var_dump(dechex($a)); // string(3) "4d2"

// 可以使用 (int) 或者 intval() 来强制把一个类型转成 int 类型
var_dump(22/3); // float(7.3333333333333)
var_dump((int)(22/3)); // int(7)
var_dump(intval(22/3)); // int(7)
var_dump(round(22/3, 2)); // float(7.33) round函数的第二个参数为保留小数点几位

在Sublime Text 3 下执行结果如下:

int(1234)
int(1234)
int(1234)
int(1234)
string(11) "10011010010"
string(4) "2322"
string(3) "4d2"
float(7.3333333333333)
int(7)
int(7)
float(7.33)

Float 浮点型

Float、Double、Real都是浮点型

<?php
/* example_08.php */

$a = 1.234; // float(1.234)
$b = 1.23e4; // float(12300)
$c = 5E-10; // float(5.0E-10)

var_dump($a, $b, $c);

/* 片断二 */
$d = (0.1 + 0.7) * 10;
var_dump($d, floor($d));
if ($d == 8) {
    echo "我等于8\n";
} else {
    echo "我不等于8\n";
}

/* 片断三 */
/* bccomp 如果两个数相等返回0, 左边的数大返回1, 左边小则返回-1. 下面的2为只比较前2位的小数位 */
if (bccomp($d, 8, 2) === 0) {
    echo "我等于8\n";
} else {
    echo "我不等于8\n";
}

在Sublime Text 3 下执行结果如下:

float(1.234)
float(12300)
float(5.0E-10)
float(8)
我不等于8
我等于8

大家可以看到片断二中的代码理论上应该返回的是相等,但结果不等。(0.1 + 0.7) * 10 在计算机内部,可能是7.999999……所以我们用floor($d)舍去法舍去小数取整时,返回的是7而不是8。
永远不要相信浮点数结果精确到了最后一位,也永远不要比较两个浮点数是否相等。
如果需要比较,一定要使用任意精度函数(如BCMath、GMP相关函数),如上片断三代码所示。更多BCMatch函数请参考这里

String 字符串

字符串,我们之前在写第一个程序的时候,echo输出的就是字符串,可以用如下几种方式来表达一个字符串。

单引号

不解析里面的变量和特殊字符的转义序列,如下例子中的\t和$name都不会被解析。

/* 单引号 */
$name = '张三';
$str1 = '\t1. 他说:"我叫$name"。';
echo $str1;
echo "\n";

在Sublime Text 3 下执行结果如下:

\t1. 他说:"我叫$name"。

双引号

会解析变量和特殊字符的转义序列,\t被转成了制表符

/* 双引号 */
$str2 = "\t2. 他说:\"我叫$name\"。";
echo $str2;
echo "\n";

在Sublime Text 3 下执行结果如下:

    2. 他说:"我叫张三"。

heredoc 语法结构

解析规则同双引号

/* Heredoc 多行字符串 */
$str3 = <<< EOT
3. 他说:"我叫$name"。
    我说:"你就不要骗我了"。
\t他面色一囧。
EOT;
// EOT; 一定要放到最前面,不能有任何空格或者其它字符,“我说”前面的空白也会打出来。

echo $str3;
echo "\n";

在Sublime Text 3 下执行结果如下:

3. 他说:"我叫张三"。
    我说:"你就不要骗我了"。
    他面色一囧。

nowdoc 语法结构

解析规则同单引号

/* Heredoc 多行字符串 */
$str4 = <<<'EOT'
4. 他说:"我叫$name"。
    我说:"你就不要骗我了"。
\t他面色一囧。
EOT;
// EOT; 一定要放到最前面,不能有任何空格或者其它字符

在Sublime Text 3 下执行结果如下:

4. 他说:"我叫$name"。
    我说:"你就不要骗我了"。
\t他面色一囧。

字符串的连接

// 字符串连接
$a = "中国";
$ab = "美国";
$abc = "俄罗斯";

$combine1 = $a . $ab . $abc . '都是大国';
$combine2 = "{$a}{$ab}{$abc}都是大国";
$combine3 = sprintf("%s%s%s都是大国", $a, $ab, $abc);
echo $combine1;
echo "\n";
echo $combine2;
echo "\n";
echo $combine3;
echo "\n";

在Sublime Text 3 下执行结果如下:

中国美国俄罗斯都是大国
中国美国俄罗斯都是大国
中国美国俄罗斯都是大国

使用 {} 来解析复杂的情况

// 字符串连接
$a = "中国";
$ab = "美国";
$abc = "俄罗斯";

// 使用 {} 来解析复杂的情况
// echo "$abcdefd";
echo "{$ab}cdefd";
echo "\n";

$arr = [
    'key1' => [
        'key2' => 'name'
    ],
];

echo "5.他说:\"我叫${$arr['key1']['key2']}\"。";
echo "\n";

在Sublime Text 3 下执行结果如下:

美国cdefd
5.他说:"我叫张三"。

把字符串当成数组处理

第一位是0,第二位是1……

// 把字符串当成数组处理,第一位是0,第二位是1……
$str5 = 'xyzefg';
echo $str5[0], "\n"; // x
// echo $str5[6], "\n"; // 最大是5,6已经越界。PHP Notice:  Uninitialized string offset:

在Sublime Text 3 下执行结果如下:

x

字符串转换为数值的情况

// 字符串转换为数值的情况
error_reporting(E_ALL ^ E_WARNING ^ E_NOTICE); // 以下代码会大量报错,暂时屏蔽一下 E_WARNING E_NOTICE 级别错误

$v1 = 1 + "10.5";       // float(11.5)   "10.5"字符串,转化成了 10.5
$v2 = 1 + "-1.3e3";     // float(-1299)  "-1.3e3"转成了数字-1.3e3,即-1300
$v3 = 1 + "b-1.3e3";    // int(1)        以字母开头的"b-1.3e3",会被转成0
$v4 = 1 + "b1";         // int(1)        以字母开头的"b1",会被转成0
$v5 = 1 + "1b10";       // int(2)        以数字开头的"1b10",会去除第一个字母及后面所有的内容,只保留1
$v6 = 4 + "10.2b100";   // float(14.2)   以数字开头的"10.2b100",会去除第一个字母及后面所有的内容,只保留10.2
$v7 = "10.0b " + 1;     // float(11)     以数字开头的"10.0b ",只保留10.0
$v8 = "10.0b " + 1.0;   // float(11)     以数字开头的"10.0b ",只保留10.0

var_dump($v1, $v2, $v3, $v4, $v5, $v6, $v7, $v8);

在Sublime Text 3 下执行结果如下:

float(11.5)
float(-1299)
int(1)
int(1)
int(2)
float(14.2)
float(11)
float(11)

字符串相关函数示例

更多字符串函数见这里

// 字符串相关函数示例
// 在PHP手册里有大量以 str 开头的函数
$str6 = 'Hello My name is Smith';

// 把 str6 里的小写 m 替换成 M
echo str_replace('m', 'M', $str6); // Hello My naMe is SMith
echo "\n";

// 把 str6 全部转成大写
echo strtoupper($str6); // HELLO MY NAME IS SMITH
echo "\n";

// 截取字符串
echo substr($str6, 0, 5); // Hello  从第0个字符开始,截取长度为5的字符
echo "\n";
echo substr($str6, 10, 2); // am    从第10个字符开始,截取长度为2的字符
echo "\n";


// 对于中文的处理
$str7 = '中国,中央之国。';

// 把 str7 里的 "中" 替换成 "美"
echo mb_ereg_replace('中', '美', $str7); // 美国,美央之国。
echo "\n";

// 把 str7 里的
echo mb_substr($str7, 3, 2); // 中央
echo "\n";

在Sublime Text 3 下执行结果如下:

Hello My naMe is SMith
HELLO MY NAME IS SMITH
Hello
am
美国,美央之国。
中央

Array 数组

PHP里的数组,相当于其它语言里的数组、列表、字典、集合、栈、队列。

数组有一维数组,二维数组,多维数组。

定义一个数组

// 老写法
$arr1 = array(1, 2, 3);

// 新写法。PHP5.4以后,用 [] 代替 array(),建议用 []
$arr2 = [1, 2, 3];

带 key 的数组

$arr2 实际上是有 key 的,相当于如下定义:

$arr2 = [
    0 => 1,
    1 => 2,
    2 => 3,
];

上面最后一行的逗号可以没有,也可以有。但在多行模式下,保留最好,这样如果再多加一行的时候,会很方便。

key 可以是 int 或者 string。如果有相同的key,使用最后一个对应的值。

<?php
// 键名转换与覆盖
$arr3 = [
    1    => "a",
    "1"  => "b", // 它也是1
    1.5  => "c", // 只能是int或者string 1.5会转化成 1
    true => "d", // 它也是1
];
var_dump($arr3);

在Sublime Text 3 下执行结果如下:

array(1) {
  [1]=>
  string(1) "d"
}

int 与 string 键名混合情况下,我们可以到看到a的键名是0,b的键名是1,因为有100是数字键名,所以c的键名就加1成了101了。

// int 与 string 键名混合
$arr4 = [
    'a',
    'name' => 'TFBOYS',
    'age' => '16',
    'b',
    100 => '哈',
    'c',
];
var_dump($arr4);

$arr5 = [
    10 => 'a',
    'b', // key 为 11 自动加 1
    'c', // key 为 12
    'd', // key 为 13
];
var_dump($arr5);

在Sublime Text 3 下执行结果如下:

array(6) {
  [0]=>
  string(1) "a"
  ["name"]=>
  string(6) "TFBOYS"
  ["age"]=>
  string(2) "16"
  [1]=>
  string(1) "b"
  [100]=>
  string(3) "哈"
  [101]=>
  string(1) "c"
}
array(4) {
  [10]=>
  string(1) "a"
  [11]=>
  string(1) "b"
  [12]=>
  string(1) "c"
  [13]=>
  string(1) "d"
}

访问数组单元

// 多维数组及访问数组单元
$arr6 = [
    100 => 'today',
    'name' => '中国人',
    'country' => [
        'china' => [
            'province' => 'Shanghai',
        ],
    ],
];

echo $arr6[100] . "\n";
echo $arr6['name'] . "\n";
echo $arr6['country']['china']['province'] . "\n";

在Sublime Text 3 下执行结果如下:

today
中国人
Shanghai

新建、修改、删除数组

// 新建、修改、删除数组
$arr7 = [];
$arr7['a'] = 'aaa';
$arr7['b'] = 'bbb';
$arr7['c'] = 'ccc';
$arr7[] = 'ddd';
$arr7[] = 'eee';

var_dump($arr7);
// 修改 c 的值
$arr7['c'] = 'ccccc';
// 删除 ddd 和 bbb
unset($arr7[0], $arr7['b']);
var_dump($arr7);

在Sublime Text 3 下执行结果如下:

array(5) {
  ["a"]=>
  string(3) "aaa"
  ["b"]=>
  string(3) "bbb"
  ["c"]=>
  string(3) "ccc"
  [0]=>
  string(3) "ddd"
  [1]=>
  string(3) "eee"
}
array(3) {
  ["a"]=>
  string(3) "aaa"
  ["c"]=>
  string(5) "ccccc"
  [1]=>
  string(3) "eee"
}

新建、遍历一维二维数组

// foreach 遍历一维数组
$arr8 = ['a', 'b', 'c', 'd'];
// $arr9 要存在,并且要为数组,先判断后使用,是一个好习惯
if (!empty($arr8) && is_array($arr8)) {
    foreach ($arr8 as $v) {
        echo $v;
    }
}
echo "\n";

// foreach 遍历二维数组
$arr9 = [];
$arr9[1] = [ // 下标从 1 开始自增
    'name' => '小明',
    'score' => '98',
];

// 这也是添加一个元素的方式
$arr9[] = [
    'name' => '小黄',
    'score' => '99',
];

// array_push用于向一个数组尾部添加一个元素
array_push($arr9, [
    'name' => '小红',
    'score' => '100',
]);

var_dump($arr9);

// $arr9 要存在,并且要为数组,先判断后使用,是一个好习惯
if (!empty($arr9) && is_array($arr9)) {
    foreach ($arr9 as $k => $v) { // $k 表示的是 键名
        echo "第{$k}条,姓名:{$v['name']},成绩:{$v['score']}\n";
    }
}

在Sublime Text 3 下执行结果如下:

abcd
array(3) {
  [1]=>
  array(2) {
    ["name"]=>
    string(6) "小明"
    ["score"]=>
    string(2) "98"
  }
  [2]=>
  array(2) {
    ["name"]=>
    string(6) "小黄"
    ["score"]=>
    string(2) "99"
  }
  [3]=>
  array(2) {
    ["name"]=>
    string(6) "小红"
    ["score"]=>
    string(3) "100"
  }
}
第1条,姓名:小明,成绩:98
第2条,姓名:小黄,成绩:99
第3条,姓名:小红,成绩:100

数组函数

上面有is_array来判断是否是数组,array_push用于向一个数组尾部添加一个元素。下面演示ksort和sort用于排序数组。更多数组函数请参考这里

// 数组函数
$arr10 = [
    'a' => '5',
    'c' => '1',
    'b' => '3',
];

ksort($arr10); // 按键名来进行排序
var_dump($arr10);

sort($arr10);  // 按键值来进行排序
var_dump($arr10);

在Sublime Text 3 下执行结果如下:

array(3) {
  ["a"]=>
  string(1) "5"
  ["b"]=>
  string(1) "3"
  ["c"]=>
  string(1) "1"
}
array(3) {
  [0]=>
  string(1) "1"
  [1]=>
  string(1) "3"
  [2]=>
  string(1) "5"
}

数组的复制与引用

复制

$arr11 = [1, 2, 3];
$arr12 = $arr11;
$arr12[0] = 4;
var_dump($arr11, $arr12);

在命令行下执行结果如下,可以看到两个数组结果是不一样的。

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  [2]=>
  int(3)
}
array(3) {
  [0]=>
  int(4)
  [1]=>
  int(2)
  [2]=>
  int(3)
}

引用

// 引用
$arr13 = [5, 6 ,7];
$arr14 = &$arr13;
$arr14[0] = 8;
var_dump($arr13, $arr14);

在命令行下执行结果如下,可以看到引用的情况下两个数组结果一样

array(3) {
  [0]=>
  int(8)
  [1]=>
  int(6)
  [2]=>
  int(7)
}
array(3) {
  [0]=>
  int(8)
  [1]=>
  int(6)
  [2]=>
  int(7)
}

在 foreach 里引用

// 引用并修改值
$arr15 = [
    [
        'name' => '张三',
        'score' => '99',
    ],
    [
        'name' => '李四',
        'score' => '100',
    ]
];

foreach ($arr15 as &$v) {
    $v['age'] = '16';
}

var_dump($arr15);

在命令行下执行结果如下,可以看到每个数组元素里均加上了一个age

array(2) {
  [0]=>
  array(3) {
    ["name"]=>
    string(6) "张三"
    ["score"]=>
    string(2) "99"
    ["age"]=>
    string(2) "16"
  }
  [1]=>
  &array(3) {
    ["name"]=>
    string(6) "李四"
    ["score"]=>
    string(3) "100"
    ["age"]=>
    string(2) "16"
  }
}

Object 对象

实有实例化的类都是对象。is_object可以判断一个变量是否是Object 对象,也可以用 (object)来强制转成对象。

实例化的类

Class Human {
    public function population()
    {
        echo "世界人口太多了\n";
    }
}

$obj1 = new Human();
var_dump(is_object($obj1)); // bool(true)
var_dump($obj1); // object(Human)#1 (0) { }

在Sublime Text 3 下执行结果如下:

bool(true)
object(Human)#1 (0) {
}

数组转成对象

// 数组转成对象
$arr1 = [1, 2, 'a' => '333'];
var_dump($arr1);
$obj2 = (object) $arr1;
var_dump($obj2);
var_dump(is_object($obj2));
var_dump($obj2->a);

// 可以遍历 $obj2 的属性
foreach ($obj2 as $k => $v) {
    var_dump($k .$v);
}

在Sublime Text 3 下执行结果如下:

array(3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  ["a"]=>
  string(3) "333"
}
object(stdClass)#2 (3) {
  [0]=>
  int(1)
  [1]=>
  int(2)
  ["a"]=>
  string(3) "333"
}
bool(true)

// foreach 遍历的结果
string(3) "333"
int(0)
int(1)
int(1)
int(2)
string(1) "a"
string(3) "333"

字符串转成对象

// 字符串转成对象时,会放在 scalar 标签下
$str1 = 'abcde';
$obj3 = (object) $str1;
var_dump($obj3);
var_dump($obj3->scalar);

在Sublime Text 3 下执行结果如下:

object(stdClass)#3 (1) {
  ["scalar"]=>
  string(5) "abcde"
}
string(5) "abcde"

Callable / Callback(可调用)(回调类型)

在各种语言里,回调类型都是一种很常见的类型。可以在调用之前用is_callable来判断是否是可用的回调类型。call_user_func和call_user_func_array是较常见的两种调用方式。在使用PHP手册时,参数类型为 callable 的就要传递回调类型的变量。

<?php
/* example_13.php */

/* 这是一个类 */
Class Human {
    public function population($populationNumber)
    {
        echo "世界人口太多了,目前有{$populationNumber}亿了\n";
    }
}
$theHuman = new Human();

/* 这是一个匿名函数 */
$closure = function ($MyMoney, $yourMoney) {
    echo "我有{$MyMoney}块,你有{$yourMoney}块\n";
}; /* 注意这里有一个 ; 号 */


/* 判断是否是一个可调用类型 */
var_dump(is_callable($closure));
var_dump(is_callable([$theHuman, 'population']));

/* 一种调用方式 */
call_user_func([$theHuman, 'population'], 72);
call_user_func($closure, '80', '120');
call_user_func_array($closure, ['100', '50']);

在Sublime Text 3 下执行结果如下:

bool(true)
bool(true)
世界人口太多了,目前有72亿了
我有80块,你有120块
我有100块,你有50块

Resource 资源类型

资源 resource 是一种特殊变量,保存了到外部资源的一个引用,比如打开文件、连接数据库、请求网络等。

<?php
/* example_12.php */

$handle = fopen('example_12.txt', 'ab');
var_dump(gettype($handle));
var_dump(is_resource($handle));
fclose($handle);

在Sublime Text 3 下执行结果如下:

string(8) "resource"
bool(true)

NULL(无类型)

表示一个变量没有值。有时候需要显式的设置一个变量是NULL,然后后期赋值。

  1. 可能直接被赋值为NULL
  2. 可能没有赋值
  3. 被 unset
<?php
/* example_14.php */

$a = NULL;
$b;
$c = [
    'name' => '张三',
];

unset($c['name']);

var_dump(is_null($a));
var_dump(is_null($b));
var_dump(is_null($c['name']));

var_dump($a, $b, $c);

在Sublime Text 3 下执行结果如下:PHP Notice错误,说明变量没有定义。

bool(true)

Notice: Undefined variable: b in D:\xampp\htdocs\phpstudy\example_14.php on line 13
bool(true)
PHP Notice:  Undefined variable: b in D:\xampp\htdocs\phpstudy\example_14.php on line 13
PHP Notice:  Undefined index: name in D:\xampp\htdocs\phpstudy\example_14.php on line 14

Notice: Undefined index: name in D:\xampp\htdocs\phpstudy\example_14.php on line 14
bool(true)
PHP Notice:  Undefined variable: b in D:\xampp\htdocs\phpstudy\example_14.php on line 16

Notice: Undefined variable: b in D:\xampp\htdocs\phpstudy\example_14.php on line 16
NULL
NULL
array(0) {
}

伪类型

伪类型(pseudo-types) 是 PHP 文档里用于标识参数可以使用的类型和值。 仅用于PHP手册及我们代码中注释部分。

mixed

mixed 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
例如 gettype() 可以接受所有的 PHP 类型,str_replace() 可以接受字符串和数组。

gettype
(PHP 4, PHP 5, PHP 7)

gettype — 获取变量的类型

描述
string gettype ( mixed $var )
返回 PHP 变量的类型 var. 

number

number 说明一个参数可以是 integer 或者 float。

/**
 * 取钱
 *
 * @param   number  $amount     数额
 *
 *
 * @return  bool
 */

callback

本文档中在 PHP 5.4 引入 callable 类型之前使用 了 callback 伪类型。二者含义完全相同。 现在已经用callable类型替代

is_callable
(PHP 4 >= 4.0.6, PHP 5, PHP 7)

is_callable — 检测参数是否为合法的可调用结构 

说明
bool is_callable ( callable $name [, bool $syntax_only = false [, string &$callable_name ]] )

array|object

array|object 意思是参数既可以是 array 也可以是 object。

void

void 作为返回类型意味着函数的返回值是无用的。void 作为参数列表意味着函数不接受任何参数。

...

在函数原型中,$... 表示等等的意思。当一个函数可以接受任意个参数时使用此变量名。

var_dump
(PHP 4, PHP 5, PHP 7)

var_dump — 打印变量的相关信息

说明
void var_dump ( mixed $expression [, mixed $... ] )

课堂作业

检查大家学的是否认真的作业题,大家可以在不运行的情况下,明确的知道答案吗?

<?php
/* example_15.php */
error_reporting(E_ALL ^ E_NOTICE);

$a = false;
var_dump(is_null($a));
var_dump(isset($a));
var_dump(empty($a));


$a = null;
var_dump(is_null($a));
var_dump(isset($a));
var_dump(empty($a));


$a = '';
var_dump(is_null($a));
var_dump(isset($a));
var_dump(empty($a));


$a = 0;
var_dump(is_null($a));
var_dump(isset($a));
var_dump(empty($a));

$a = '0';
var_dump(is_null($a));
var_dump(isset($a));
var_dump(empty($a));

$a = 0.0;
var_dump(is_null($a));
var_dump(isset($a));
var_dump(empty($a));

$a = 0.5;
var_dump(is_null($a));
var_dump(isset($a));
var_dump(empty($a));

$a = [];
var_dump(is_null($a));
var_dump(isset($a));
var_dump(empty($a));

$b;
var_dump(is_null($b));
var_dump(isset($b));
var_dump(empty($b));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 162,158评论 4 370
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,600评论 1 307
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,785评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,655评论 0 220
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 53,075评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 41,002评论 1 225
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,146评论 2 318
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,918评论 0 211
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,671评论 1 250
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,838评论 2 254
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,318评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,636评论 3 263
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,343评论 3 244
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,187评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,982评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,126评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,934评论 2 279

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,111评论 18 139
  • 一、php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语...
    空谷悠阅读 3,022评论 4 97
  • Sublime Text:一款具有代码高亮、语法提示、自动完成且反应快速的编辑器软件,不仅具有华丽的界面,还支持插...
    xiaotao123阅读 9,424评论 0 27
  • 【这是“心灵·对话”写作小组第9篇文章】 今天召开了二手车经销商大会,上午主要是向大家介绍了2017年二手车的战略...
    富足Linda阅读 218评论 2 0
  • 无论怎么难以相信,我还是走到了2016年的最后一天。 以前总是觉得,十八岁是很遥远的一件事...
    98一介凡人阅读 673评论 0 1