申明函数
/*** 计算两数相加之和* @param $a* @param $b* @return mixed*/function add($a, $b) {$sum = $a + $b;return $sum;}
php7以后添加了声明参数和返回值类型
function add(int $a, int $b): int {$sum = $a + $b;return $sum;}
备注:函数参数默认以值传递方式进行传递,也就是说,我们传递到函数内部的实际上是变量值的拷贝,而不是变量本身
如果需要传实参数,要加&,引用传递传递的是变量指针值(内存地址)的拷贝
字符串函数
https://www.php.net/manual/zh/ref.strings.php
数组函数
https://www.php.net/manual/zh/ref.array.php
数学函数
https://www.php.net/manual/zh/ref.math.php
文件系统函数
// 文件系统函数file_put_contents('test1.txt', '你好,学院君'); // 快速写入内容到文件 test.txt(不存在则自动创建)$content = file_get_contents('test1.txt'); // 从文件 test.txt 中读取内容var_dump($content);$file = fopen('test2.txt', 'w'); // 以写入模式打开文件 test2.txt,不存在则创建自动创建fwrite($file, '你好,'); // 通过 fwrite 写入内容到文件fwrite($file, '学院君!'); // 继续写入fclose($file); // 关闭这个文件句柄$file = fopen('test2.txt', 'r'); // 只读模式打开 test2.txt 文件$content = '';while (!feof($file)) { // 还没有到文件末尾,则继续读取$content .= fread($file, 1024); // 通过 fread 读取指定字节内容}fclose($file);var_dump($content);// 删除上述文件unlink('test1.txt');unlink('test2.txt');
匿名函数
$add = function(int $a, int $b): int {return $a + $b;}$x = 1;$y = 2;//调用方式1$sum = $add($x, $y);//调用方式2$sum = call_user_func($add, $a, $b);
默认参数
$add = function (int $a, int $b = 2): int {return $a + $b;};
可变函数
<?php$add = function (int $a, int $b = 2): int {return $a + $b;};$multi = function (int $a, int $b): int {return $a * $b;};$n1 = 1;$n2 = 3;$sum = $add($n1, $n2);echo "$n1 + $n2 = $sum" . PHP_EOL;// 将 multi 赋值给 $add$add = $multi;// 方法2$add = 'multi';$product = $add($n1, $n2);echo "$n1 x $n2 = $product" . PHP_EOL;
继承父作用域变量
匿名函数(或者叫闭包函数)的一个强大功能是支持在函数体中直接引用上下文变量(继承父作用域的变量),只需要通过 use 关键字传递当前上下文中的变量,它们就可以在闭包函数体中直接使用,而不需要通过参数形式传入,这样一来,其他引用该文件的代码就可以间接引用当前父作用域下的变量,如果是在类方法中定义的匿名函数,则可以直接引用相应类实例的属性
<?phpfunction subFunction() {return function () {global $n1, $n2;return $n1 - $n2;}}$n1 = 1;$n2 = 3;// 计算两数相加$add = function () use ($n1, $n2) {return $n1 + $n2;};// 调用匿名函数$sum = $add();echo "$n1 + $n2 = $sum" . PHP_EOL;$subFun = subFunction();$sub = $subFun;echo "$n1 - $n2 = $sub" . PHP_EOL;
如果不是通过匿名函数的话,只能基于 global 关键字通过全局变量引用函数体外部定义的变量:
但实际编码中,尽量避免使用 global 关键字
