Callback/Callable类型

自PHP5.4起可用callable类型指定回调类型callback。

一些函数如call_user_func()或usort()可以接受用户自定义的回调函数作为参数。回调函数不止可以是简单函数,还可以是对象的方法,包括静态类方法。

传递

PHP是将函数以string形式传递的。可以使用任何内置或用户自定义函数,但除了语言结构例如:array(),echo,empty(),eval(),exit(),isset(),list(),print或unset()。

一个已实例化的object的方法被作为array传递,下标0包含该object,下标1包含方法名。在同一个类里可以访问protected和private方法。

静态类方法也可不经实例化该类的对象而传递,只要在下标0中包含类名而不是对象。自PHP5.2.3起,也可以传递‘ClassName::methodName’。

除了普通的用户自定义函数外,也可传递匿名函数给回调参数。

Note:

在函数中注册有多个回调内容是时(如使用call_user_func()与call_user_func_array()),如在前一个回调中有未捕获的异常,其后的将不再被调用。

伪类型与变量

伪类型是PHP文档里用于指示参数可以使用的类型和值。请注意,它们不是PHP语言里原生类型。所以不能把伪类型用于自定义函数里的类型约束。

mixed

mixed说明一个参数可以接受多种不同的(但不一定是所有的)类型。

例如gettype()可以接受所有的PHP类型,str_replace()可以接受字符串和数组。

number

number说明一个参数可以是integer或者float。

callback

在PHP5.4引入callable类型之前使用了callback伪类型。二者含义完全相同。

array|object

array|object意思是参数既可以是array也可以是object。

void

void作为返回类型意味着函数的返回值是无用的。void作为参数列表意味着函数不接受任何参数。

...

在函数原型中,$...表示等等的意思。当一个函数可以接受任意个参数时使用此变量名。

类型转换的判别

PHP在变量定义中不需要(或不支持)明确的类型定义;变量类型是根据使用该变量的上下文所决定的。也就是说,如果把一个string值赋给变量$var,$var就成了一个string。如果又把一个integer赋给$var,那它就成了一个integer。

PHP的自动类型转换的一个例子是乘法运算符“*”。如果任何一个操作数是float,则所有的操作数都被当成float,结果也是float。否则操作数会被解释为integer,结果也是integer。注意这并没有改变这些操作数本身的类型;改变的仅是这些操作数如何被求值以及表达式本身的类型。

Note:自动转换为数组的行为目前没有定义。

类型强制转换

PHP中的类型强制转换和C中的非常像:在要转换的变量之前加上用括号括起来的目标类型。

允许的强制转换有:

  • (int),(integer)-转换为整型integer
  • (bool),(boolean)-转换为布尔类型boolean
  • (float),(double),(real)-转换为浮点型float
  • (string)-转换为字符串string
  • (array)-转换为数组array
  • (object)-转换为对象object
  • (unset)-转换为NULL(PHP5)

(binary)转换和b前缀转换支持为PHP5.2.1新增。

注意在括号内允许有空格和制表符。

Note:可以将变量放置在双引号中的方式来代替将变量转换成字符串。

转载于:https://www.cnblogs.com/apricot92/p/8081348.html

你可能感兴趣的:(Callback/Callable类型)