PHP中的类型约束介绍
author:一佰互联 2019-04-28   click:159

PHP的类方法和函数中可实现类型约束,但参数只能指定类、数组、接口、callable 四种类型,参数可默认为NULL,PHP并不能约束标量类型或其它类型。

如下示例:复制代码 代码如下:<?php class Test{    public function test_array(array $arr)    {        print_r($arr);    }     public function test_class(Test1 $test1 = null)    {        print_r($test1);    }     public function test_callable(callable $callback, $data)    {        call_user_func($callback, $data);    }     public function test_interface(Traversable $iterator)    {        print_r(get_class($iterator));    }     public function test_class_with_null(Test1 $test1 = NULL)    {     }} class Test1{} $test = new Test(); //函数调用的参数与定义的参数类型不一致时,会抛出一个可捕获的致命错误。 $test->test_array(array(1));$test->test_class(new Test1());$test->test_callable("print_r", 1);$test->test_interface(new ArrayObject(array()));$test->test_class_with_null();

那么对于标量类型如何约束呢?

PECL扩展库中提供了SPL Types扩展实现interger、float、bool、enum、string类型约束。

复制代码 代码如下:$int  = new  SplInt ( 94 ); try {     $int  =  "Try to cast a string value for fun" ;} catch ( UnexpectedValueException $uve ) {    echo  $uve -> getMessage () .  PHP_EOL ;} echo  $int  .  PHP_EOL ;/*运行结果:Value not an integer94*/

SPL Types会降低一定的灵活性和性能,实际项目中三思而行。