申明函数

  1. /**
  2. * 计算两数相加之和
  3. * @param $a
  4. * @param $b
  5. * @return mixed
  6. */
  7. function add($a, $b) {
  8. $sum = $a + $b;
  9. return $sum;
  10. }

php7以后添加了声明参数和返回值类型

  1. function add(int $a, int $b): int {
  2. $sum = $a + $b;
  3. return $sum;
  4. }

备注:函数参数默认以值传递方式进行传递,也就是说,我们传递到函数内部的实际上是变量值的拷贝,而不是变量本身
如果需要传实参数,要加&,引用传递传递的是变量指针值(内存地址)的拷贝

字符串函数

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

文件系统函数

  1. // 文件系统函数
  2. file_put_contents('test1.txt', '你好,学院君'); // 快速写入内容到文件 test.txt(不存在则自动创建)
  3. $content = file_get_contents('test1.txt'); // 从文件 test.txt 中读取内容
  4. var_dump($content);
  5. $file = fopen('test2.txt', 'w'); // 以写入模式打开文件 test2.txt,不存在则创建自动创建
  6. fwrite($file, '你好,'); // 通过 fwrite 写入内容到文件
  7. fwrite($file, '学院君!'); // 继续写入
  8. fclose($file); // 关闭这个文件句柄
  9. $file = fopen('test2.txt', 'r'); // 只读模式打开 test2.txt 文件
  10. $content = '';
  11. while (!feof($file)) { // 还没有到文件末尾,则继续读取
  12. $content .= fread($file, 1024); // 通过 fread 读取指定字节内容
  13. }
  14. fclose($file);
  15. var_dump($content);
  16. // 删除上述文件
  17. unlink('test1.txt');
  18. unlink('test2.txt');

匿名函数

  1. $add = function(int $a, int $b): int {
  2. return $a + $b;
  3. }
  4. $x = 1;
  5. $y = 2;
  6. //调用方式1
  7. $sum = $add($x, $y);
  8. //调用方式2
  9. $sum = call_user_func($add, $a, $b);

默认参数
  1. $add = function (int $a, int $b = 2): int {
  2. return $a + $b;
  3. };

可变函数

  1. <?php
  2. $add = function (int $a, int $b = 2): int {
  3. return $a + $b;
  4. };
  5. $multi = function (int $a, int $b): int {
  6. return $a * $b;
  7. };
  8. $n1 = 1;
  9. $n2 = 3;
  10. $sum = $add($n1, $n2);
  11. echo "$n1 + $n2 = $sum" . PHP_EOL;
  12. // 将 multi 赋值给 $add
  13. $add = $multi;
  14. // 方法2
  15. $add = 'multi';
  16. $product = $add($n1, $n2);
  17. echo "$n1 x $n2 = $product" . PHP_EOL;


继承父作用域变量

匿名函数(或者叫闭包函数)的一个强大功能是支持在函数体中直接引用上下文变量(继承父作用域的变量),只需要通过 use 关键字传递当前上下文中的变量,它们就可以在闭包函数体中直接使用,而不需要通过参数形式传入,这样一来,其他引用该文件的代码就可以间接引用当前父作用域下的变量,如果是在类方法中定义的匿名函数,则可以直接引用相应类实例的属性

  1. <?php
  2. function subFunction() {
  3. return function () {
  4. global $n1, $n2;
  5. return $n1 - $n2;
  6. }
  7. }
  8. $n1 = 1;
  9. $n2 = 3;
  10. // 计算两数相加
  11. $add = function () use ($n1, $n2) {
  12. return $n1 + $n2;
  13. };
  14. // 调用匿名函数
  15. $sum = $add();
  16. echo "$n1 + $n2 = $sum" . PHP_EOL;
  17. $subFun = subFunction();
  18. $sub = $subFun;
  19. echo "$n1 - $n2 = $sub" . PHP_EOL;

如果不是通过匿名函数的话,只能基于 global 关键字通过全局变量引用函数体外部定义的变量:
但实际编码中,尽量避免使用 global 关键字