require_once
require_once 表达式和 require 表达式完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含
include_once
include_once 表达式在脚本执行期间包含并运行指定文件。此行为和include表达类似,区别在于如果文件中已经被包含过,就不会再次包含,且include_once 会返回true。require_once 文件仅包含一次。
include_once 可以用于在脚本执行期间同一个文件可能被包含多次的情况下,想确保它只被包含一次以避免函数重定义。
goto
goto操作符可用来跳转到程序中的另一位置。该目标可用区分大小写的目标名称加上冒号来标记,而跳转
指令是goto之后接上目标位置的标记。需要注意的是PHP中的goto的目标位置只能位于同一个文件和作用域。
函数
用户自定义函数
一个函数可由以下的语法来定义:
任何有效的PHP代码都可能出现在函数内部,甚至包含其他函数和类定义
PHP中的所有函数和类都具有全局作用域,可定义在一个函数之内但在外调用。
PHP不支持函数重载,也不可能取消或重定义已声明的函数
PHP可调用递归函数
函数的参数和参数值
函数参数在函数签名中声明。通过参数值列表可以传递信息到函数以逗号作为分隔符的表达式列表函数在实际调用之前值参数是从左到右求值的,并将结果赋值给函数的参数
PHP支持按值传递参数值(默认),通过引用传递参数以及默认参数。也支持可变长度参数列表和命名参数
自PHP8.0起,函数参数列表可包含一个尾部的逗号,逗号可忽略。在参数列表较长或包含较长的变量名的情况下,可以方便地垂直列出参数
通过引用传递参数值
默认情况下,函数参数值通过值传递(在函数内改变值,不会影响函数外的值)可通过引用传递改变函数外的值。
在参数前加上&,可以让函数始终通过引用传递
默认参数的值
函数可以用类似分配变量的语法定义参数的默认值。
仅当参数未传递值时才用默认值,注意传递null不会分配默认值
默认参数值可以是标量值、array、特殊类型null,以及从PHP 8.1开始,使用new ClassName()语法的对象
默认值必须是常量表达式,不能是变量、类成员、函数调用等
需要注意的是任何可选参数都应在强制参数之后指定,否则可选参数不能在调用时省略。
自PHP 8.0起,命名参数,可用于跳过多个可选参数。
自PHP 8.0起,弃用在可选参数之后声明强制参数。通常可以通过删除默认值来解决,因为它不会被弃用。例外是Type $param = null 类型的参数,其中默认null使得该类型可以隐式为null,自PHP 8.4起,此用法被弃用,应改用显式可为null类型
可变数量的参数值列表
PHP在用户自定义函数
需要注意的是 自PHP 7.1 起 省略未指定默认值的参数会引发
可变数量的参数值列表
PHP在用户自定义函数中支持可变数数量的参数值列表。由...语法实现。
参数列表可能包含...记号,表示该函数接受可变数量的参数值。参数值将作为array 传递到指定变量中:
... 也可以在调用函数时将 array 或 Traversable 变量或文字解包到参数值列表中使用:
可以在...前指定正常的位置参数,不符合位置参数的尾部参数才会被添加到...生成的数组
命名参数
PHP 8.0 引入了命名参数作为现有参数的扩展。命名参数允许根据参数名而不是参数位置向函数传参。这使得参数的含义自成体系,参数与顺序无关,并允许任意跳过默认值。
命名参数通过在参数名前加上冒号来传递,并允许用关键字作为参数名。参数名必须是一个标识符,不允许动态指定。