PHP 标准附带了许多函数和结构。还有一些函数需要特定 PHP 扩展编译,否则将出现致命的“未定义函数”错误。例如,要使用 image 函数(如 imagecreatetruecolor()),PHP 必须使用 GD 支持进行编译。或者,要使用 mysqli_connect(),PHP 必须使用 MySQLi 支持进行编译。每个 PHP 版本都包含许多核心函数,例如 字符串 和 变量 函数。调用 phpinfo() 或 get_loaded_extensions() 将显示哪些扩展加载到 PHP 中。还要注意,默认情况下启用了许多扩展,并且 PHP 手册按扩展划分。有关如何设置 PHP 的信息,请参阅 配置、安装 和各个扩展章节。
在手册中名为 如何阅读函数定义 的部分解释了如何阅读和理解函数的原型。重要的是要意识到函数返回什么或函数是否直接对传入的值进行操作。例如,str_replace() 将返回修改后的字符串,而 usort() 则直接对传入的变量本身进行操作。每个手册页还为每个函数提供特定信息,例如有关函数参数、行为更改、成功和失败的返回值以及可用性信息。了解这些重要的(但往往是细微的)差异对于编写正确的 PHP 代码至关重要。
注意: 如果传递给函数的参数与它的预期不符,例如传递 数组 而预期为 字符串,则函数的返回值是未定义的。在这种情况下,它可能会返回
null
,但这只是一个约定,不可依赖。从 PHP 8.0.0 开始,在这种情况下应该会抛出 TypeError 异常。
注意:
内置函数的标量类型在强制模式下默认情况下是可空的。从 PHP 8.1.0 开始,将
null
传递给未声明为可空的内部函数参数是不可取的,并且在强制模式下会发出弃用通知,以与用户定义函数的行为保持一致,在用户定义函数中,标量类型需要显式标记为可空。例如,strlen() 函数期望参数
$string
为非可空 字符串。由于历史原因,PHP 允许在强制模式下为该参数传递null
,并且该参数会隐式转换为 字符串,从而导致""
值。相反,在严格模式下会发出 TypeError。<?php
var_dump(strlen(null));
// "Deprecated: Passing null to parameter #1 ($string) of type string is deprecated" as of PHP 8.1.0
// int(0)
var_dump(str_contains("foobar", null));
// "Deprecated: Passing null to parameter #2 ($needle) of type string is deprecated" as of PHP 8.1.0
// bool(true)
?>