simker

Life is too short, just make it.


  • 首页

  • 归档

  • 分类

  • 标签

  • 关于

  • 音乐

  • 搜索

PHP基础笔记之类型

发表于 2021-02-08 更新于 2021-02-22 分类于 PHP 阅读次数: Disqus:
本文字数: 4.8k 阅读时长 ≈ 4 分钟

最近巩固下自己的 php,故而整理了下 php 相关的技术点,不求大而全,只求能离 php 更近一点。
本文为php基础的开篇,只介绍类型基本信息及一些小技巧,不深入,后续专门写这几种类型的文章。

Basis 基本情况

参考 php 手册 - 类型

Boolean - 布尔

基本用于判断,也是最大的最简洁的使用。

1
2
3
4
<?php
$action = 2;
var_dump(($action) ? true: false);
?>
转换

你可以用 (bool) 或者 (boolean) 把一个值转换成 boolean 类型。当然大多数情况你不需要强制转换。

当运算符,函数或者流程控制结构需要一个 boolean 参数时,该值会被自动转换。

以下情况会转化成 false :

  • 布尔值 FALSE 本身
  • 整型值 0(零)
  • 浮点型值 0.0(零)
  • 空字符串"",以及字符串 "0"
  • 不包括任何元素的数组array(),[]
  • 特殊类型 null(包括尚未赋值的变量undefined)
  • 从空标记生成的 SimpleXML 对象

除开以上情况外,其他值都视为 true

引用手册的示例:

1
2
3
4
5
6
7
8
9
10
<?php
var_dump((bool) ""); // bool(false)
var_dump((bool) 1); // bool(true)
var_dump((bool) -2); // bool(true)
var_dump((bool) "foo"); // bool(true)
var_dump((bool) 2.3e5); // bool(true)
var_dump((bool) array(12)); // bool(true)
var_dump((bool) array()); // bool(false)
var_dump((bool) "false"); // bool(true)
?>

Integer - 整型

是集合 ℤ = {..., -2, -1, 0, 1, 2, ...} 中的某个数。
可以使用十进制,十六进制,八进制或二进制(php 5.4.0+)表示,前面可以加上可选的符号(- 或者 +)。

引用手册的表达示例:

1
2
3
4
5
6
7
<?php
$a = 1234; // 十进制数
$a = -123; // 负数
$a = 0123; // 八进制数 (等于十进制 83),数字前必须加上 0(零)
$a = 0x1A; // 十六进制数 (等于十进制 26),数字前必须加上 0x。
$a = 0b11111111; // 二进制数字 (等于十进制 255),数字前必须加上 0b。
?>
溢出

给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。

String 字符串

由一系列的字符组成,其中每个字符等同于一个字节。详见字符串类型详解。

可以用"或者'来定义。

如果想使用其它转义序列例如 \r 或者 \n,使用反斜线 \ 来防止转义

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
echo 'this is a simple string';

// 可以录入多行
echo 'You can also have embedded newlines in
strings this way as it is
okay to do';

// 输出: Arnold once said: "I'll be back"
echo 'Arnold once said: "I\'ll be back"';

// 输出: You deleted C:\*.*?
echo 'You deleted C:\\*.*?';

// 输出: You deleted C:\*.*?
echo 'You deleted C:\*.*?';

// 输出: This will not expand: \n a newline
echo 'This will not expand: \n a newline';

// 输出: Variables do not $expand $either
echo 'Variables do not $expand $either';
?>
解析变量

早双引号的定义下可以可以解析变量,数组和对象也可以解析。替代的方案 - 变量拼接

在遇到数组对象的索引是string类型时,需要用到{}解析,如果找不到数组的索引或者找不到对象的属性 or 方法,不会解析。
如何不希望解析对象,数组,变量时,添加反引号 \ 防止转义

如:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
class People {
public $john = "John Smith";
}
$b = new People();
$a = [
1 => 2,
"a" => 3
];
var_dump("is a $a[1], ${a['a']}, $b->john ");
var_dump("is a $a['a'], $b->johns "); // Won't work
var_dump("is a " . $a['a']); // 拼接变量
?>

Array 数组

是一个有序映射。映射是一种把 values 关联到 keys 的类型。

定义

可以用 array() 语言结构或者 [] (PHP 5.4.0+) 来新建一个数组。它接受任意数量用逗号分隔的键(key) => 值(value)对。

key 可以是 integer 或者 string。

value 可以是任意类型。

此外 key 会有如下的强制转换:

  • 包含有合法整型值的字符串会被转换为整型。例如键名 "8" 实际会被储存为 8。但是 "08" 则不会强制转换,因为其不是一个合法的十进制数值。
  • 浮点数也会被转换为整型,意味着其小数部分会被舍去。例如键名 8.7 实际会被储存为 8。
  • 布尔值也会被转换成整型。即键名 true 实际会被储存为 1 而键名 false 会被储存为 0。
  • Null 会被转换为空字符串,即键名 null 实际会被储存为 ""。

数组和对象不能被用为键名, 坚持这么做会导致警告:Illegal offset type。
如果在数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$array = array(
1 => "a",
"1" => "b",
1.5 => "c",
true => "d",
);
var_dump($array);
// will output
// array(1) {
// [1]=>
// string(1) "d"
// }
?>

Object 对象

要创建一个新的对象 object,使用 new 语句实例化.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
class foo
{
public $bar = 'bar';
function do_foo()
{
echo "Doing foo.";
}
}

$bar = new foo;
$bar->do_foo();
var_dump($bar->bar);
?>
转化

如果将一个对象转换成对象,它将不会有任何变化。
如果其它任何类型的值被转换成对象,将会创建一个内置类 stdClass 的实例。
如果该值为 NULL,则新的实例为空。
array 转换成 object 将使键名成为属性名并具有相对应的值。

注意:使用 PHP 7.2.0 之前的版本,数字键只能通过迭代访问。

1
2
3
4
5
6
7
<?php
$obj = (object) array('1' => 'foo');
var_dump(isset($obj->{'1'})); // PHP 7.2.0 后输出 'bool(true)',之前版本会输出 'bool(false)'
var_dump(key($obj)); // PHP 7.2.0 后输出 'string(1) "1"',之前版本输出 'int(1)'
$obj = (object) 'ciao';
echo $obj->scalar; // outputs 'ciao'
?>

Resource 资源

这个就不介绍了,参考Resource 资源类型。

Null

特殊的 NULL 值表示一个变量没有值。NULL 类型唯一可能的值就是 NULL。

在下列情况下一个变量被认为是 NULL:

  • 被赋值为 NULL。
  • 尚未被赋值。
  • 被 unset()。

Callback / Callable php 5.4.0+

一些函数如 call_user_func() 或 usort() 可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。

示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// Our closure
$double = function($a) {
return $a * 2;
};

// This is our range of numbers
$numbers = range(1, 5);

// Use the closure as a callback here to
// double the size of each element in our
// range
$new_numbers = array_map($double, $numbers);
print implode(' ', $new_numbers);
// will output
// 2 4 6 8 10
?>

类型转化

以上就是php类型的基本信息。下面罗列些允许的强制类型转换:

  • (int), (integer) - 转换为整形 integer
  • (bool), (boolean) - 转换为布尔类型 boolean
  • (float), (double), (real) - 转换为浮点型 float
  • (string) - 转换为字符串 string
  • (array) - 转换为数组 array
  • (object) - 转换为对象 object
  • (unset) - 转换为 NULL (PHP 5)

有效判断

在PHP里面,我习惯用empty和isset作为判断依据,其中,

  • isset 判断是否定义
  • empty 判断是否有效,也有isset的作用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
$arr = ['a' => 1, 'b' => 'c'];
$class = new stdClass();
$class->a = 1;

var_dump(isset($arr['a'])); // true
var_dump(isset($arr['c'])); // false
var_dump(isset($class->a)); // true
var_dump(isset($class->b)); // false

var_dump(empty($arr['a'])); // false
var_dump(empty($arr['c'])); // true
var_dump(empty($class->a)); // false
var_dump(empty($class->b)); // true
var_dump(empty(0)); // true
var_dump(empty(0.00)); // true
var_dump(empty(false)); // true
var_dump(empty('0')); // true
var_dump(empty('0.00')); // false
var_dump(empty(null)); // true
var_dump(empty('')); // true
var_dump(empty([])); // true
var_dump(empty(new stdClass())); // false
var_dump(empty($undefined)); // true
?>

使用empty判断的时候一定要注意转化类型,比如字符串和数字

enjoy and happy coding!

Cai xian 微信支付

微信支付

Cai xian 支付宝

支付宝

# notes
浅谈前后端请求加密与签名
PHP梳理之string
  • 文章目录
  • 站点概览
Cai xian

Cai xian

A super nice guy!
24 日志
12 分类
15 标签
  1. 1. Basis 基本情况
  2. 2. Boolean - 布尔
    1. 2.1. 转换
  3. 3. Integer - 整型
    1. 3.1. 溢出
  4. 4. String 字符串
    1. 4.1. 解析变量
  5. 5. Array 数组
    1. 5.1. 定义
  6. 6. Object 对象
    1. 6.1. 转化
  7. 7. Resource 资源
  8. 8. Null
  9. 9. Callback / Callable php 5.4.0+
  10. 10. 类型转化
  11. 11. 有效判断
© 2019 – 2021 Cai xian | 70k | 1:04
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Pisces v7.3.0
|