Practical PHP Programming

如何阅读函数原型

通过函数原型,可以标准地描述函数接受的参数和函数的返回值。函数原型在本书和PHP在线手册中都有所使用。一旦你掌握了阅读函数原型的艺术,你应该仅仅通过阅读函数原型就能够大概了解函数的使用方法。然而,你不必为了了解函数原型是如何工作的而阅读本书——所有的函数使用方法都有文字描述,列出函数原型仅仅是为了方便。

因为函数原型在本书的每个函数中都有所使用,所以你在继续阅读之前应该了解。现在先不用担心每个函数的作用是什么,因为在本书后面都有所讲解。我直接从PHP手册中拿出对应的函数原型,因此,你可以很方便地从手册中找到。下面是一个基本的函数strtoupper()的原型:

string strtoupper(string string)

意思是函数将一个string作为参数传入,并返回一个string。上面用了string string是因为PHP手册为了描述每个参数做什么,给每个参数命了名。这里告诉我们strtoupper()接受一个叫做string的字符串(string)类型的参数——虽然我认为这不是最好的命名,但是最起码这是有意义的。这个函数也返回一个字符串——手册像大部分类似C的语言一样,将返回的类型放在了函数名的前面。

当函数使用引用作为参数时,这个参数将通过一个&符号传递给原型。这并不意味着你在函数调用时必须像原型那样加上&,这只是告诉你这个参数是一个引用。

下面来看一下sha1()的原型:

string sha1(string source[, bool raw_output])

正如上面所说的,sha1()返回一个字符串,将一个字符串作为它的第一个参数,将一个布尔值作为它的第二个参数。然而,布尔值在方括号[]当中——意思是“这是一个可选的参数”。

可选参数有时候让人有些迷惑,比如mysql_connect()的完全定义如下:

resource mysql_connect([string server[, string username[, string password[, bool new_link[, int client_flags]]]]])

mysql_connect()的每个参数都是可选的,如果你没有提供参数的值的话,PHP将给每个参数赋上对应的默认值。原型当中包含两种特殊的数据类型:数字(number)和混合(mixed)。数字可以是浮点型或整型,混合意味着接受或返回两种或两种以上的数据类型。

例如pow()的定义如下:

number pow(number base, number exp)

接受任意数字,也返回数字。而序列化serialize()的定义如下:

string serialize(mixed value)

当你用serialize()的时候,你就会发现它对对象和类都使用,这也就是为什么这个函数的参数是混合类型的。还有一种数据类型是空类型(void),意思是“没有返回值”或“没有参数”。

函数原型的最后一个管理是使用...,意思是“参数的数目不定”。例如,isset函数的原型是:

bool isset(mixed var[, mixed var[, mixed ...]])

最少接受一个变量作为参数,因为...,所以可以接受多个参数。