PHP面向对象类型约束用法分析


Posted in PHP onJune 12, 2019

本文实例讲述了PHP面向对象类型约束。分享给大家供大家参考,具体如下:

什么是类型约束

就是要求某个变量只能使用(接受,存储)某种指定的数据类型;php属于”弱类型语言“,通常不支持类型约束;相应的,强类型语言,类型约束却是其“基本特征”。

php中,只支持局部的部分类型约束

php中,只支持在函数(或方法)的形参上,设定类型的约束目标,形式如下:

function 方法名( [要求使用的类型] $p1, [要求使用的类型] $p2, ......){
  //....
}

说明:

  1. 定义一个函数(方法)时,一个形参,可以使用类型约束,也可以不使用;
  2. 如果使用了类型约束,则对应的该实参数据,就必须是要求的那种类型;
  3. 能够使用的类型约束,只有以下几种情况可用:

① 数组:array

② 对象:使用类的名称,传递过来的实参,必须是该类的实例

③ 接口:使用接口的名称,传递过来的实参,必须是实现了该接口的类的实例

<?php
//演示类型约束
interface USB{} //接口
class A{}  //类
class B implements USB{}  //实现了USB接口的类
function f1($p1, array $p2, A $p3, USB $P4){
  echo "<br />没有约束的p1:" . $p1;
  echo "<br />要求是数组的p2:" ;
    print_r($p2);
  echo "<br />要求是类A的对象:";
    var_dump($p3);
  echo "<br />要求是实现实现了USB接口的对象:";
    var_dump($P4);
}
$obj1 = new A();
$obj2 = new B();
$arr = array();
//演示各种形式的函数调用
//f1(1.2, 1, $obj1, $obj2);//报错,第二个参数不是数组类型,Argument 2 passed to f1() must be an array, integer give
//f1(1, $arr, $obj1, $obj1);//报错,第四个参数,Argument 4 passed to f1() must implement interface USB, instance of A given
f1(1.2, $arr, $obj1, $obj2);//没问题
?>

运行结果:

没有约束的p1:1.2
要求是数组的p2:Array ( )
要求是类A的对象:
object(A)[1]
要求是实现实现了USB接口的对象:
object(B)[2]

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
在线增减.htpasswd内的用户
Oct 09 PHP
浅析php变量修饰符static的使用
Jun 28 PHP
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
Aug 10 PHP
php身份证号码检查类实例
Jun 18 PHP
PHP环境中Memcache的安装和使用
Nov 05 PHP
谈谈你对Zend SAPIs(Zend SAPI Internals)的理解
Nov 10 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
php5.2的curl-bug 服务器被php进程卡死问题排查
Sep 19 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
CodeIgniter框架常见用法工作总结
Mar 16 PHP
laravel 5.4 + vue + vux + element的环境搭配过程介绍
Apr 26 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
Jun 12 #PHP
php实现微信公众号创建自定义菜单功能的实例代码
Jun 11 #PHP
php转换上传word文件为PDF的方法【基于COM组件】
Jun 10 #PHP
php简单计算权重的方法示例【适合抽奖类应用】
Jun 10 #PHP
PHP7实现和CryptoJS的AES加密方式互通示例【AES-128-ECB加密】
Jun 08 #PHP
php使用scandir()函数扫描指定目录下所有文件示例
Jun 08 #PHP
php中目录操作opendir()、readdir()及scandir()用法示例
Jun 08 #PHP
You might like
php 购物车实例(申精)
2009/05/11 PHP
php如何调用webservice应用介绍
2012/11/24 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
Yii2 hasOne(), hasMany() 实现三表关联的方法(两种)
2017/02/15 PHP
PHP设计模式之单例模式定义与用法分析
2019/03/26 PHP
js表格分页实现代码
2009/09/18 Javascript
jQuery+jqmodal弹出窗口实现代码分明
2010/06/14 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
js实现正方形颜色从下往上升的效果
2014/08/04 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
浅析javascript异步执行函数导致的变量变化问题解决思路
2016/05/13 Javascript
jQuery插件easyUI实现通过JS显示Dialog的方法
2016/09/16 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
利用webstrom调试Vue.js单页面程序的方法教程
2017/06/06 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
微信小程序拖拽排序列表的示例代码
2020/07/08 Javascript
js定时器出现第一次延迟的原因及解决方法
2021/01/04 Javascript
[59:15]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第一场 11.20
2020/11/20 DOTA
Python数据结构与算法之图的广度优先与深度优先搜索算法示例
2017/12/14 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
python执行scp命令拷贝文件及文件夹到远程主机的目录方法
2019/07/08 Python
Python类中的魔法方法之 __slots__原理解析
2019/08/26 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
2020/01/16 Python
css3边框_动力节点Java学院整理
2017/07/11 HTML / CSS
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
创建索引时需要注意的事项
2013/05/13 面试题
说出你对remoting 和webservice的理解和应用
2014/06/08 面试题
建筑工程造价专业自荐信
2014/07/08 职场文书
中小企业员工手册范本
2015/05/14 职场文书
客户答谢会致辞
2015/07/30 职场文书
大学生军训感言
2015/08/01 职场文书
2016形势与政策学习心得体会
2016/01/12 职场文书
浅谈MySQL next-key lock 加锁范围
2021/06/07 MySQL
Android自定义scrollview实现回弹效果
2022/04/01 Java/Android