PHP的类方法和函数中可实现类型约束,但参数只能指定类、数组、接口、callable 四种类型,参数可默认为NULL,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会降低一定的灵活性和性能,实际项目中三思而行。
Stellungnahme:Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn