php类型约束
来源:互联网 发布:中国的参政党知乎 编辑:程序博客网 时间:2024/06/06 16:36
众所周知,在强类型语言中,类型约束是语法上的要求,即:定义一个变量的时候,必须指定其类型,并且以后该变量也只能储存该类型的数据。
而PHP是弱类型语言,其特点就是无需为变量指定类型,而且在其后也可以储存任何类型,当然这也是PHP能快速开发的关键之一。但是在php的高版本(PHP5器)语法中,在某些指定场合,针对某些特定类型,也是可以进行语法约束的。
PHP5可以使用类型约束。函数的参数可以指定必须为对象(在函数原型里面指定类的名字),接口,数组(PHP5.1起)或者callable(PHP5.4起)。不过如果使用NULL作为参数的默认值,那么在调用函数的时候依然可以使用NULL作为实参。
如果一个类或接口指定了类型约束,则其所有的子类或实现也都如此。
在PHP7之前,类型约束不能用于标量类型如int或string,Traits也不允许。
看看下面列子:
<?php/** * 测试类型约束类 */class Test{ private function say() { echo '我是测试类型约束的类'; } public function dump($data) { var_dump($data); } /** * 测试对象约束 * @param Test $test */ public function testObject(Test $test) { $test->say(); } /** * 测试数组约束 * @param array $arr */ public function testArray(array $arr) { var_dump($arr); } /** * 测试接口约束 * @param animal $obj */ public function testInterface(animal $obj) { echo $obj->run(); } /** * 测试回调方法约束 * @param callable $fun * @param $data */ public function testCallable(callable $fun, $data) { call_user_func($fun,$data); }}/** * Class Test2 * 生成一个子类 */class Test2 extends Test{}/** * Interface animal * 定义一个接口 */interface animal{ public function run();}/** * Class cat * 实现animal接口 */class cat implements animal{ public function run() { echo '喵喵喵'; }}$test = new Test();//测试对象约束$test->testObject($test);//测试数组约束$test->testArray([1,2,3]);//测试接口约束$test->testInterface(new cat());//测试回调约束$test->testCallable('self::dump', [1,2,3]);//$test->testCallable(array('self','dump'), [4,5,6]);//$test->testCallable(array($test,'dump'), [7,8,9]);//回调约束,用类方法或者函数都可以$test->testCallable('var_dump', [11,22,33]);//对象约束子类也可以$t2 = new Test2();$test->testObject($t2);运行结果如下:
0 0
- PHP的类型约束
- 80. PHP 类型约束
- PHP之类型约束
- php类型约束
- PHP之类型约束
- PHP中的类型约束介绍
- 浅谈PHP的类型约束
- PHP面向对象_类型约束
- php自定义函数指定参数类型 [类型约束]
- 类型约束
- 类型约束
- 类型约束
- Oracle Constraint_type,约束类型
- Oracle Constraint_type,约束类型
- Oracle Constraint_type,约束类型
- 完整性约束的类型
- DTD 类型约束文件
- Swift-类型约束
- javaweb学习(3):JDBC进阶之路
- Edit Distance
- studio快捷键
- ios测试推送工具介绍
- BZOJ3329 Xorequ
- php类型约束
- Python 装饰器
- Hibernate与 MyBatis的比较
- Nginx搭建反向代理服务器过程详解
- Redis调优--多队列网卡中断
- Java学习笔记(二十七):关于System.getProperty("user.dir")
- 关于使用属性动画来动态改变控件的布局位置
- 下拉菜单
- 关于新版本react-native报错 :Cannot find module 'invariant'