申明函数
/**
* 计算两数相加之和
* @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
关键字传递当前上下文中的变量,它们就可以在闭包函数体中直接使用,而不需要通过参数形式传入,这样一来,其他引用该文件的代码就可以间接引用当前父作用域下的变量,如果是在类方法中定义的匿名函数,则可以直接引用相应类实例的属性
<?php
function 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
关键字