本篇文章给大家带来的内容是关于PHP类型约束的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
导语:所谓类型约束,即定义一个变量的时候,必须指定其类型,并且以后该变量也只能存储该类型数据。PHP 虽然是弱类型语言,但是在 PHP 5 已经支持类型约束,包括对象、接口、数组,在 PHP 7 之后支持标量类型约束,下面简单写几个示例。
标量类型、数组
在参数中指明类型,如果不一致,会抛出一个可捕获的致命错误
?php * 数组类型约束 * @param array $arrfunction printArray(array $arr) echo implode( , , $arr);printArray(array(1, 2, 3));// 1,2,3printArray( 1 // Fatal error: Uncaught TypeError: Argument 1 passed to printArray() must be of the type array, string given, called in D:/WWW/test.php on line 13 and defined in D:/WWW/test.php:7 Stack trace: #0 D:/WWW/test.php(13): printArray( 1 ) #1 {main} thrown in D:/WWW/test.php on line 7
如上所示,标量类型也是如此
?php * 标量类型约束 * @param string $name * @param int $age * @param float $height * @param bool $isBoyfunction sayInfo(string $name, int $age, float $height, bool $isBoy) echo 姓名: . $name . ,年龄: . $age . ,身高: . $height . ,是否为男孩: . ($isBoy ? 是 : 否 sayInfo( tom , 12, 134.5, true);// 姓名:tom,年龄:12,身高:134.5,是否为男孩:是
对象、接口
类型约束也可以指定为对象或者接口。首先定义一个 Human 接口,Boy 和 Girl 两个类分别实现接口
?php * 接口 * Interface Humaninterface Human html' target='_blank'>public function say(); public function run(); * 实现 Human 接口 * Class Boyclass Boy implements Human public function say() echo a boy say public function run() echo a boy run * 实现 Human 接口 * Class Girlclass Girl implements Human public function say() echo a girl say public function run() echo a girl run }
接下来新建一个类来测试
?phpinclude ./human.php class Action * Boy 对象类型约束 * @param Boy $boy public function boySay(Boy $boy) $boy- say(); * Girl 对象类型约束 * @param Girl $girl public function girlSay(Girl $girl) $girl- say(); * Human 接口类型约束 * @param Human $obj public function humanRun(Human $obj) $obj- run();$obj = new Action();$obj- boySay(new Boy());// a boy sayecho br / $obj- girlSay(new Girl());// a girl sayecho br / $obj- humanRun(new Boy());// a boy runecho br / $obj- humanRun(new Girl());// a girl run
当类型约束为具体对象 Boy 或者 Girl 时,只能传入要求的对象。当类型约束为接口 Human 时,可以传入实现接口的类 Boy 或 Girl。
【相关推荐:PHP视频教程】
以上就是PHP类型约束的详细介绍(附代码)的详细内容,PHP教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答