一、函数
1、定义一个函数的语法如下:
function functionName($param1, $param2, ...) {// 函数体return $result; // 可选的返回值
}
function add($a, $b) {$sum = $a + $b; //函数体可直接使用形参运算return $sum;
}// 调用函数 ----函数的调用可以在函数定义之前
$result = add(3, 5); //传入的实参,可以是变量或者有值表达式
echo "The sum is: " . $result; // 输出:The sum is: 8
2、形参&实参
形参可以有多个,使用逗号分隔即可。
实参个数可以多于形参(不能少于)
默认值:形参的默认值。若调用时没有提供实参,则函数使用默认值执行函数
引用传递:只有变量才可以引用传递,如果尝试将常量或者字面量(如数字或字符串)作为引用传递,会导致语法错误或者警告,因为常量和字面量在 PHP 中是不可修改的,因此无法将它们作为引用传递给函数。
3、函数返回值
return直接结束函数,所以后面所有的内容不再执行。
4、作用域
全局变量:可以在脚本的任何地方访问和修改,但要注意全局变量在不同的上下文中可能有不同的行为,特别是在函数和类的方法中。
局部变量:只能在函数内部访问。函数外部无法直接访问函数内部的变量。
超全局变量:没有访问限制,任何作用域中都可以访问,包括函数内部和类的方法内部。
静态作用域:静态变量在函数内部声明,但在函数调用结束后并不丢失其值,而是保留在内存中直到脚本执行结束。使用static关键字修饰,用来实现夸函数共享数据的变量(注:跨函数是指同个函数多次调用)。这对于需要在函数多次调用之间保留状态或计数器非常有用。
function incrementAndDisplay() {static $count = 0; // 静态变量 $count 初始化为 0$count++; // 每次调用增加计数器的值echo "Count: $count<br>";
}// 连续调用 incrementAndDisplay 函数
incrementAndDisplay(); // 输出:Count: 1
incrementAndDisplay(); // 输出:Count: 2
incrementAndDisplay(); // 输出:Count: 3
5、可变函数
在 PHP 中,可变函数是指可以通过变量来调用的函数。这种特性使得函数名可以动态地确定和调用,通常用于需要根据不同条件调用不同函数的情况。
function greet() {echo "Hello, ";
}function farewell() {echo "Goodbye!";
}// 定义一个变量来存储函数名
$functionName = "greet";// 使用可变函数调用 greet() 函数
$functionName(); // 输出:Hello,// 修改变量为 farewell 函数
$functionName = "farewell";// 再次使用可变函数调用 farewell() 函数
$functionName(); // 输出:Goodbye!
6、匿名函数
在 PHP 中,匿名函数(也称为闭包函数)是一种没有具体名称的函数,可以在需要时声明和使用。
// 基本的匿名函数示例
$greet = function($name) {echo "Hello, $name!";
};// 调用匿名函数
$greet('Alice'); // 输出:Hello, Alice!// 另一个示例,使用匿名函数作为回调函数
$numbers = [1, 2, 3, 4, 5];
$filteredNumbers = array_filter($numbers, function($num) {return $num % 2 == 0; // 过滤偶数
});print_r($filteredNumbers); // 输出:Array ( [1] => 2 [3] => 4 )// 将匿名函数赋值给变量
$calculate = function($a, $b) {return $a + $b;
};echo $calculate(10, 5); // 输出:15
闭包(Closure)是一种特殊的匿名函数,它可以在声明时捕获其所在的上下文中的变量。这意味着闭包可以访问其声明外部作用域的变量,并且可以在之后的调用中保持对这些变量的访问权。在 PHP 中,闭包通常与回调函数一起使用,或者作为函数的返回值返回。
// 定义一个简单的闭包
$factor = 2;
$closure = function($number) use ($factor) {return $number * $factor;
};// 使用闭包
$result = $closure(5);
echo $result; // 输出:10 (5 * 2)
- 定义了一个闭包
$closure
,它使用了外部变量$factor
。 - 虽然
$factor
是在闭包外部定义的,但闭包内部仍然可以使用它,这是因为use ($factor)
表示闭包会捕获并持有$factor
的值。 - 当我们调用
$closure(5)
时,闭包会将 5 乘以外部的$factor
值,然后返回结果 10。
二、错误处理
1、错误分类
1、语法错误:书写代码不符合PHP语法规范,会导致代码在编译中不允许,故也不会执行(parse
error);
2、运行时错误:代码编译通过,但在执行时会出现一些条件不满足从而导致的错误。(runtime error取空数组的第几位数)
3、逻辑错误:写代码不规范、但逻辑性错误,导致虽可正常运行,但得不到预期结果。
2、错误代号
系统代号在PHP中均被定义为了系统常量,故可直接使用:
1、系统错误:
E_PARSE:编译错误,代码不会运行
E_ERROR:fatal error致命错误,会在出错的位置断掉
E_WARNING:warning警告错误,不影响执行,但可能得不到预期结果
E_NOTICE:notice,通知错误、不影响代码执行
2、用户错误(用户使用的代号):E_USER_ERROR、E_USER_WARNING、E_USER_NOTICE 用户在使用自定义错误出发的时候,会使用的错误代号。
3、E_ALL:代表所有错误
所有E开头的错误常量都由一个字节(8位)存储,且每一种错误占用一个位,故可进行位运算操作。
3、错误触发
在 PHP 中,header()
函数是用来发送原始 HTTP 头部的函数之一。它通常用于控制网页的缓存、重定向和设置 Cookie 等功能。
发送基本头部,告诉浏览器该页面使用 UTF-8 编码。
header("Content-Type: text/html; charset=UTF-8");
header()必须在任何实际输出之前调用,这意味着它应该在 <html>
标签或任何输出内容之前调用,否则会产生错误。