php怎样创建函数_php创建函数语法与规则【语法】

PHP函数必须用function关键字定义,区分大小写且不可与内置函数同名;函数名以字母或下划线开头,支持默认参数(须置末位),return可返回值或null;作用域内变量需global/static/use显式引入;PHP7+类型声明更严格,PHP8支持联合类型,重复定义或使用保留字将报错。

PHP 创建函数必须用 function 关键字开头,函数名区分大小写,且不能与内置函数同名(比如 printarray_merge)。

函数定义的基本语法结构

最简形式是 function + 函数名 + 括号 + 花括号。参数可选,返回值可选,但花括号不能省略。

  • 函数名必须以字母或下划线开头,后续可跟字母、数字、下划线(如 my_func2 合法,2func 非法)
  • 参数列表中多个参数用逗号分隔,支持默认值(如 $name = 'guest'),但带默认值的参数必须放在最后
  • 函数体内可以使用 return 提前退出并返回值;无 return 或只写 return; 则返回 null
function greet($name, $greeting = 'Hello') {
    return $greeting . ', ' . $name . '!';
}
echo greet('Alice'); // Hello, Alice!

函数作用域与变量可见性

PHP 函数内部无法直接访问外部变量,除非显式使用 globalstatic 或传参方式引入。

  • global $var 可读写全局变量,但容易引发维护问题,不推荐频繁使用
  • static $count = 0 让变量在多次调用间保留值,仅初始化一次
  • 闭包(anonymous function)可用 use 绑定外部变量,如 function() use ($config) { ... }
$counter = 0;
function increment() {
    static $count = 0;
    $count++;
    return $count;
}
echo increment(); // 1
echo increment(); // 2

常见错误与兼容性注意点

PHP 7+ 对函数定义更严格,尤其在类型声明和返回值声明上容易报错。

  • 启用严格模式(declare(strict_types=1);)后,类型不匹配会抛 Fatal error,而非静默转换
  • PHP 8 开始支持联合类型(如 function foo(): int|string),但 PHP 7.4 不支持,需留意部署环境
  • 函数名不能是 PHP 保留字(如 classfunctionecho),否则解析失败
  • 重复定义同名函数(即使在不同文件)会触发 Fatal error: Cannot redeclare

    ,应配合 function_exists() 检查
if (!function_exists('safe_json_encode')) {
    function safe_json_encode($data) {
        return json_encode($data, JSON_UNESCAPED_UNICODE);
    }
}

函数命名是否清晰、参数顺序是否符合直觉、是否过度依赖全局状态——这些比语法正确与否更容易影响长期协作和调试效率。