欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP中的类型约束介绍

程序员文章站 2022-04-20 23:07:19
php的类方法和函数中可实现,但参数只能指定类、数组、接口、callable 四种类型,参数可默认为null,php并不能约束标量类型或其它类型。 如下示例: 复制代码...

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 integer
94
*/

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