有容乃大,无欲则刚,容是别人,欲是自己。 —— 《士兵突击》
一、数组函数
1 | >>>>>>>>>>>array_chunk |
二、字符串函数
- addcslashes:以 C 语言风格使用反斜线转义字符串中的字符
- addslashes:使用反斜线引用字符串
- stripcslashes:反引用一个使用 addcslashes() 转义的字符串
- stripslashes:反引用一个引用字符串
- bin2hex:函数把包含数据的二进制字符串转换为十六进制值
- hex2bin:转换十六进制字符串为二进制字符串
- chr:返回指定的字符
- chunk_split:将字符串分割成小块
- convert_cyr_string:将字符由一种 Cyrillic 字符转换成另一种
- convert_uudecode:解码一个 uuencode 编码的字符串
- convert_uuencode:使用 uuencode 编码一个字符串
- count_chars:返回字符串所用字符的信
- crc32:计算一个字符串的 crc32 多项式
- crypt:单向字符串散列
- echo:输出一个或多个字符串
- fprintf:将格式化后的字符串写入到流
- get_html_translation_table:返回使用 htmlspecialchars() 和 htmlentities() 后的转换表
- hebrev:将逻辑顺序希伯来文(logical-Hebrew)转换为视觉顺序希伯来文(visual-Hebrew)
- hebrevc:将逻辑顺序希伯来文(logical-Hebrew)转换为视觉顺序希伯来文(visual-Hebrew),并且转换换行符
- html_entity_decode:Convert HTML entities to their corresponding characters
- htmlentities:将字符转换为 HTML 转义字符
- htmlspecialchars_decode:将特殊的 HTML 实体转换回普通字符
- htmlspecialchars:将特殊字符转换为 HTML 实体
- explode:使用一个字符串分割另一个字符串
- implode:将一个一维数组的值转化为字符串
- join:别名 implode()
- lcfirst:使一个字符串的第一个字符小写
- ucfirst:将字符串的首字母转换为大写
- ucwords:将字符串中每个单词的首字母转换为大写
- strtolower:将字符串转化为小写
- strtoupper:将字符串转化为大写
- levenshtein:计算两个字符串之间的编辑距离
- localeconv:Get numeric formatting information
- trim:去除字符串首尾处的空白字符(或者其他字符)
- ltrim:删除字符串开头的空白字符(或其他字符)
- rtrim:删除字符串末端的空白字符(或者其他字符)
- chop:rtrim() 的别名
- md5_file:计算指定文件的 MD5 散列值
- md5:计算字符串的 MD5 散列值
- metaphone:Calculate the metaphone key of a string
- money_format:将数字格式化成货币字符串
- nl_langinfo:Query language and locale information
- nl2br:在字符串所有新行之前插入 HTML 换行标记
- number_format:以千位分隔符方式格式化一个数字
- ord:转换字符串第一个字节为 0-255 之间的值
- parse_str:将字符串解析成多个变量
- print:输出字符串
- printf:输出格式化字符串
- quoted_printable_decode:将 quoted-printable 字符串转换为 8-bit 字符串
- quoted_printable_encode:将 8-bit 字符串转换成 quoted-printable 字符串
- quotemeta:转义元字符集
- setlocale:设置地区信息
- sha1_file:计算文件的 sha1 散列值
- sha1:计算字符串的 sha1 散列值
- similar_text:计算两个字符串的相似度
- soundex:Calculate the soundex key of a string
- sprintf:Return a formatted string
- sscanf:根据指定格式解析输入的字符
- str_getcsv:解析 CSV 字符串为一个数组
- str_replace:子字符串替换
- str_ireplace:str_replace() 的忽略大小写版本
- str_pad:使用另一个字符串填充字符串为指定长度
- str_repeat:重复一个字符串
- str_rot13:对字符串执行 ROT13 转换
- str_shuffle:随机打乱一个字符串
- str_split:将字符串转换为数组
- str_word_count:返回字符串中单词的使用情况
- strcasecmp:二进制安全比较字符串(不区分大小写
- strchr:别名 strstr()
- strrchr:查找指定字符在字符串中的最后一次出现
- strstr:查找字符串的首次出现
- stristr:strstr() 函数的忽略大小写版本
- strcmp:二进制安全字符串比较
- strcoll:基于区域设置的字符串比较
- strcspn:获取不匹配遮罩的起始子字符串的长度
- strip_tags:从字符串中去除 HTML 和 PHP 标记
- strpos:查找字符串首次出现的位置
- stripos:查找字符串首次出现的位置(不区分大小写)
- strripos:计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写)
- strrpos:计算指定字符串在目标字符串中最后一次出现的位置
- strlen:获取字符串长度
- strnatcasecmp:使用“自然顺序”算法比较字符串(不区分大小写)
- strnatcmp:使用自然排序算法比较字符串
- strncasecmp:二进制安全比较字符串开头的若干个字符(不区分大小写)
- strncmp:二进制安全比较字符串开头的若干个字符
- strpbrk:在字符串中查找一组字符的任何一个字符
- strrev:反转字符串
- strspn:计算字符串中全部字符都存在于指定字符集合中的第一段子串的长度。
- strtok:标记分割字符串
- strtr:转换指定字符
- substr_compare:二进制安全比较字符串(从偏移位置比较指定长度)
- substr_count:计算字串出现的次数
- substr_replace:替换字符串的子串
- substr:返回字符串的子串
- vfprintf:将格式化字符串写入流
- vprintf:输出格式化字符串
- vsprintf:返回格式化字符串
- wordwrap:打断字符串为指定数量的字串
三、ob函数
概念
当PHP脚本有输出时,输出控制函数可以用这些来控制输出。这在多种不同情况中非常有用,尤其是用来在脚本开始输出数据后,发送http头信息到浏览器。输出控制函数不影响由header()或setcookie()发送的文件头信息,仅影响像echo这样的函数和PHP代码块间的数据。
常用函数
函数名称 | 含义 |
---|---|
ob_start(); | 打开一个输出缓冲区,所有的输出信息不再直接发送到涉猎器,而是保存在输出缓冲区里面 |
ob_clean(); | 删除内部缓冲区的内容,不关闭缓冲区(不输出) |
ob_end_clean() | 删除内部缓冲区的内容,关闭缓冲区(不输出) |
ob_get_clean() | 返回内部缓冲区的内容,关闭缓冲区。相当于执行ob_get_contents()和ob_end_clean() |
flush(); | 将ob_flush释放出来的内容,以及不在PHP缓冲区中的内容,整个输出至涉猎器;刷新内部缓冲区的内容,并输出 |
ob_flush(); | 发送内部缓冲区的内容到涉猎器,删除缓冲区的内容,不关闭缓冲区 |
ob_end_flush() | 发送内部缓冲区的内容到涉猎器,删除缓冲区的内容,关闭缓冲区 |
ob_get_flush() | 返回内部缓冲区的内容,并关闭缓冲区,再释放缓冲区的内容。相当于ob_end_flush()并返回缓冲区内容 |
ob_get_contents() | 返回缓冲区的内容,不输出 |
输出控制存在的意义:因为http协议的限制(前几行必须是协议信息,然后一个空行,然后才是用户需要的内容,需要保证header信息在其他内容之前发送,否则浏览器无法解析服务器返回的内容。
demo
1 | #ob_start |
四、常见函数对比
- 安全函数使用
真题:怎么在代码类的网站存储类似的脚本
<script>window.location.href='http://www.baidu.com'</script>
!
- html_entity_decode
- htmlentities
- addslashes
- stripslashes
- htmlspecialchars
- htmlspecialchars_decode
- strip_tags
- isset-is_null-empty
真题
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18$a = null;
$b = 0;
$c = '';
var_dump(isset($a)); // bool(false)
var_dump(isset($b)); // bool(true)
var_dump(isset($c)); // bool(true)
var_dump(isset($d)); // bool(false)
var_dump(is_null($a)); // bool(true)
var_dump(is_null($b)); // bool(false)
var_dump(is_null($c)); // bool(false)
var_dump(is_null($d)); // bool(true)
var_dump(empty($a)); // bool(true)
var_dump(empty($b)); // bool(true)
var_dump(empty($c)); // bool(true)
var_dump(empty($d)); // bool(true)对比
isset()函数为false的情况
- 变量的值为null
- 未定义的变量
- unset()变量之后
is_null函数为true的情况(和isset相反)
- 变量的值为null
- 未定义的变量
- unset()变量后
empty()函数为true的情况
空字符串
false
空数组array()
NULL
0
- 浮点数
0.0
- 字符串
0.0
为false
- 字符串
unset之后的变量
字符串0
未定义的变量$var
没有任何属性的对象
unset()函数,变量的值变为NULL
1 | $a = '123'; |
- 表格
对比项 | isset()方法 | empty()方法 | is_null方法 |
---|---|---|---|
空字符串”” | true | ture | false |
一个空格” “ | true | false | false |
FALSE | true | true | false |
TRUE | true | false | false |
空数组array() | true | true | false |
NULL | false | true | true |
字符串”0” | true | true | false |
整型0 | true | true | false |
浮点型0.0 | true | true | false |
未定义的变量$a | false | true | true |
综合
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42$a = "";
$b = " ";
$c = false;
$d = true;
$e = array();
$f = null;
$g = 0;
$h = 0.0;
$i = "0";
var_dump(isset($a)); // bool(true)
var_dump(isset($b)); // bool(true)
var_dump(isset($c)); // bool(true)
var_dump(isset($d)); // bool(true)
var_dump(isset($e)); // bool(true)
var_dump(isset($f)); // bool(false)
var_dump(isset($g)); // bool(true)
var_dump(isset($h)); // bool(true)
var_dump(isset($i)); // bool(true)
var_dump(isset($j)); // bool(false)
var_dump(is_null($a)); // bool(false)
var_dump(is_null($b)); // bool(false)
var_dump(is_null($c)); // bool(false)
var_dump(is_null($d)); // bool(false)
var_dump(is_null($e)); // bool(false)
var_dump(is_null($f)); // bool(true)
var_dump(is_null($g)); // bool(false)
var_dump(is_null($h)); // bool(false)
var_dump(is_null($i)); // bool(false)
var_dump(is_null($j)); // bool(true)
var_dump(empty($a)); // bool(true)
var_dump(empty($b)); // bool(false)
var_dump(empty($c)); // bool(true)
var_dump(empty($d)); // bool(false)
var_dump(empty($e)); // bool(true)
var_dump(empty($f)); // bool(true)
var_dump(empty($g)); // bool(true)
var_dump(empty($h)); // bool(true)
var_dump(empty($i)); // bool(true)
var_dump(empty($j)); // bool(true)特例
1
2
3
4var_dump(empty(0)); // bool(true)
var_dump(empty('0')); // bool(true)
var_dump(empty(0.00)); // bool(true)
var_dump(empty('0.00')); // bool(false) 特殊记忆字符串0.00
- func_num_args-func_get_arg-func_get_args
PHP默认支持按值传递参数,通过引用传递参数以及默认参数,也支持可变长度参数列表,其中可变长度参数列表就主要是通过以下几个函数实现的。
func_num_args
语法
func_num_args(void):int
说明:返回调用函数的传入参数个数
- 参数:void,即不需要传参
- 返回值:int型,为传入函数的参数数量
demo
1
2
3
4
5
6
7
8function test()
{
$count = func_num_args();
echo $count;
}
test(1, 2); //2
test(1, 2, 3); //3
func_get_arg
语法
func_get_arg(int $arg_num):mixed
说明:返回参数列表的某一项
- 参数:arg_num,参数的偏移量,函数的参数从0开始计数
- 返回值:mixed,返回指定的参数,错误则返回FALSE
demo
1
2
3
4
5
6
7
8
9function test()
{
$one = func_get_arg(0);
$two = func_get_arg(1);
echo $one,PHP_EOL,$two,PHP_EOL;
}
test(1, 2);
当在自定义函数的外面调用的该函数的时候会发出一个警告,或者是当arg_num比实际传入的参数的数目大的时候也会发出一个警告。
func_get_args
语法
func_get_args(void):array
说明:返回一个包含函数参数列表的数组
- 参数:void,即不需要传参
- 返回值:array,一个数组,其中每个元素都是目前用户自定义函数的参数列表的相应元素的副本。
demo
1
2
3
4
5
6
7function test()
{
$arg = func_get_args();
print_r($arg);
}
test(1, 2);
在用户自定义函数外调用则会出现错误警告。
get_object_vars和compact
get_object_vars ———— 返回由对象属性组成的关联数组,compact ———— 建立一个数组,包括变量名和它们的值。
array_map、array_filter、array_walk
相同点:都是利用回调函数对数组中每个元素进行操作
不同点
- 返回值
- array_map 返回数组,遍历数组元素调用函数
- array_walk 返回true/false
- array_filter 返回数组,作用是过滤数组中的元素,回调函数返回真才能保存到返回数组中
- 回调函数的参数及顺序
- 是否改变数组的值
- 返回值
demo
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84$num = array(0, 1, 2);
$map = array_map(function ($v) {
return $v == 0 ? 0 : 10;
}, $num);
print_r($map);
输出:
Array
(
[0] => 0
[1] => 10
[2] => 10
)
A.不传回调函数
$filter = array(
'a' => null,
'b' => false,
'c' => 0,
'e' => '',
'd' => 1,
);
$new = array_filter($filter);
print_r($new);
输出:
Array
(
[d] => 1
)
B.传回调函数
$num = array(0,1,2);
$filter = array_filter($num, function($v){
return $v == 0 ? '' : $v;
});
print_r($filter);
输出:
Array
(
[1] => 1
[2] => 2
)
A.传值
$num = array(0, 1, 2);
array_walk($num, function ($v, $k) {
$v++;
});
print_r($num);
输出:
Array
(
[0] => 0
[1] => 1
[2] => 2
)
B.传引用
array_walk($num, function (&$v, $k) {
$v++;
});
print_r($num);
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
C.官网示例
$fruits = array(
'a' => 'apple',
'b' => 'banana',
);
function changeValue(&$item, $key, $prefix) {
$item = "$prefix: $item";
}
function printItem($item, $key) {
echo "$key. $item<br />\n";
}
echo "改变值之前打印:\n";
array_walk($fruits, 'printItem');
array_walk($fruits, 'changeValue', 'fruit');
echo "\n改变值之后打印:\n";
array_walk($fruits, 'printItem');
魔术方法之call和callStatic
定义
__call($method, $arg)
,调用不可访问或不存在的方法时被调用__callStatic($method, $arg)
,调用不可访问或不存在的静态方法时被调用
demo
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63class Person {
private function getPrivateFunc()
{
echo "Private function";
}
private static function getPrivateStaticFunc($arg)
{
echo "Private static function";
}
private static function getProtectedStaticFunc($arg)
{
echo "Private static function";
}
public function __call($method, $arg)
{
return call_user_func_array('print_r', $arg);
}
public static function __callStatic($method, $arg)
{
return call_user_func('print_r', $arg);
}
}
$p = new Person();
$p->getMyFunc([1,2,3]);
$p->getPrivateFunc(1);
Person::getStaticFunc('a');
Person::getPrivateStaticFunc('b');
Person::getProtectedStaticFunc('c');
输出:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
1
Array
(
[0] => a
)
Array
(
[0] => b
)
Array
(
[0] => c
)pack和unpack
五、register_shutdown_function
register_shutdown_function(callable $callback[, mixed $parameter[, mixed $... ]]):void
,注册一个callback,它会在脚本执行完成或者exit()后被调用。可以多次调用register_shutdown_function(),这些被注册的回调会按照他们注册时的顺序被依次调用。如果你在注册的方法内部调用 exit(),那么所有处理会被中止,并且其他注册的中止回调也不会再被调用。Note
- 在某些web server(如Apache)上,可以在中止函数内对脚本的工作目录进行修改。
- 如果进程被信号SIGTERM或SIGKILL杀死,那么中止函数将不会被调用。尽管你无法中断SIGKILL,但你可以通过pcntl_signal()来捕获SIGTERM,通过在其中调用exit()来进行一个正常的中止。
基本用法,和别的注册回调没太大差别
1 | function shutdown() |
- 和魔术函数__destruct()对比,
1 | ini_set("max_execution_time", "10"); |
由对比可知,使用register_shutdown_function能保证即使脚本异常中止时,清理函数的代码仍然能够执行。
- 结合进程扩展控制
1 | declare(ticks = 1); |
六、debug_backtrace
用法
debug_backtrace([ int$options = DEBUG_BACKTRACE_PROVIDE_OBJECT[, int $limit = 0 ]]):array
- 返回一个包含众多关联数组的array
返回值说明
名字 | 类型 | 说明 |
---|---|---|
function | string | 当前的函数名。 |
line | integer | 当前的行号。 |
file | string | 当前的文件名。 |
class | string | 当前 class 的名称。 |
object | object | 当前的 object。 |
type | string | 当前调用的类型。如果是一个方法,会返回 “->”。如果是一个静态方法,会返回 “::”。 如果是一个函数调用,则返回空。 |
args | array | 如果在一个函数里,这会列出函数的参数。 如果是在一个被包含的文件里,会列出包含的文件名。 |
- 测试代码
1 | function func1() { |
- 运行
1 | Array |
七、str_replace
功能:子字符串替换
用法:
str_replace(mixed $search, mixed $replace, mixed $subject[, int &$count ]): mixed
说明:该函数返回一个字符串或者数组。该字符串或数组是将
subject
中全部的search
都被replace
替换之后的结果。- 如果
search
和replace
为数组,那么str_replace()
将对subject
做二者的映射替换,它们的值将会被依次处理。 - 如果
replace
的值的个数少于search
的个数,多余的替换将使用空字符串来进行。 - 如果
search
是一个数组而replace
是一个字符串,那么search
中每个元素的替换将始终使用这个字符串。
- 如果
参数
- search:查找的目标值,也就是 needle。一个数组可以指定多个目标。
- replace:search 的替换值。一个数组可以被用来指定多重替换。
- subject:执行替换的数组或者字符串。也就是 haystack。如果 subject 是一个数组,替换操作将遍历整个 subject,返回值也将是一个数组。
- count:如果被指定,它的值将被设置为替换发生的次数。
demo
1 | ## 1.简单替换并计数 |
八、函数的参数
- 通过参数列表可以传递信息到函数,即以逗号作为分隔符的表达式列表。参数是从左向右求值的。PHP支持按值传递参数(默认),通过引用传递参数以及默认参数,也支持可变长度参数列表。
- 不声明参数类型
- 强制声明参数类型
参数类型 | 说明 | PHP最小版本支持 |
---|---|---|
class/interface name | The parameter must be an instanceof the given class or interface name. | PHP 5.0.0 |
self | The parameter must be an instanceof the same class as the one the method is defined on. This can only be used on class and instance methods. | PHP 5.0.0 |
array | The parameter must be an array. | PHP 5.1.0 |
callable | The parameter must be a valid callable. | PHP 5.4.0 |
bool | The parameter must be a boolean value. | PHP 7.0.0 |
float | The parameter must be a floating point number. | PHP 7.0.0 |
int | The parameter must be an integer. | PHP 7.0.0 |
string | The parameter must be a string. | PHP 7.0.0 |
- 延伸
- 可变参数
...
- 可变参数
1 | function add(...$numbers) { |
- func_num_args/func_get_arg/func_get_args
1 | function test() { |