一、概念
PHP 内置函数是指在 PHP 的语言库中预先定义好的函数,可以直接在PHP程序中使用,而无需进行额外的定义或导入,可以直接在PHP程序中使用,而无需进行额外的定义或导入。这些内置函数包括了一系列常用的功能函数,例如echo用于输出内容、mysql_connect用于连接MySQL数据库、include_once用于包含文件等等。它们就像是PHP的系统函数一样,为开发人员提供了便捷的功能和操作。
通过使用这些内置函数,开发人员可以快速实现各种常见的操作,而无需从头开始编写复杂的代码。这些函数已经经过了广泛测试和优化,具有较高的稳定性和可靠性。
二、PHP扩展模块
除了PHP的内置函数外,还有一些函数需要与特定的PHP扩展模块一起编译使用。如果没有正确编译相关的扩展模块,当使用这些函数时,就会出现”未定义函数”的致命错误。例如,如果要使用image函数中的imagecreatetruecolor()函数,需要在编译PHP时启用GD库的支持。或者,如果要使用mysqli_connect()函数,就需要在编译PHP时启用MySQLi扩展的支持。
为了查看PHP加载了哪些扩展库,可以调用phpinfo()函数或get_loaded_extensions()函数来获取相关信息。同时,需要注意的是,许多扩展库默认就是有效的,但也可以通过配置进行调整。
注意:在PHP中,如果将一个与函数声明中参数类型不匹配的值传递给函数,例如将一个数组传递给一个字符串类型的参数,函数的返回值是不确定的,通常函数会返回null作为结果。自PHP 8.0.0版本起,如果传递给函数的参数类型与声明的类型不一致,PHP将引发TypeError异常。这是PHP 8.0.0版本引入的新特性,旨在提高代码的类型安全性和可靠性。
三、内置函数标量类型
在PHP的强制模式下,内置函数的标量类型默认可以为null,这意味着如果一个内置函数声明参数类型为非null的标量类型(例如string),则它允许传递null值作为参数。由于历史原因,在强制模式下,PHP将null隐式转换为对应的标量类型,但在PHP 8.1.0版本中,这种行为被视为过时,PHP 8.1.0版本及以后的版本不再支持该行为。
从PHP 8.1.0版本开始,如果将null传递给一个声明为非null的内置函数参数,PHP将发出弃用通知,并产生警告。此外,在严格模式下,PHP将抛出TypeError异常,而不是将null隐式转换为相应的标量类型。
例如,strlen()函数的参数$string必须为非null的string。在强制模式下,如果将null传递给该函数,PHP将隐式将null转换成空字符串””。但在PHP 8.1.0版本及以后的版本中,如果将null传递给strlen()函数,则会产生警告并发出弃用通知。
<?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) ?>