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 相关文章推荐
用PHP连接Oracle数据库
Oct 09 PHP
php getsiteurl()函数
Sep 05 PHP
PHP数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
May 29 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
Feb 05 PHP
php+highchats生成动态统计图
May 21 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
Sep 16 PHP
php中base64_decode与base64_encode加密解密函数实例
Nov 24 PHP
PHP实现图片自动清理的方法
Jul 08 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 PHP
PHP实现一个按钮点击上传多个图片操作示例
Jan 23 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
精致的人儿就要挑杯子喝咖啡
2021/03/03 冲泡冲煮
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php程序之die调试法 快速解决错误
2009/09/17 PHP
劣质的PHP代码简化
2010/02/08 PHP
浅谈php自定义错误日志
2015/02/13 PHP
PHP异常处理浅析
2015/05/12 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
Netbeans 8.2将支持PHP7 更精彩
2016/06/13 PHP
老生常谈PHP面向对象之标识映射
2017/06/21 PHP
PDO::_construct讲解
2019/01/27 PHP
jquery鼠标滑过提示title具体实现代码
2013/08/06 Javascript
图片动画横条广告带上下滚动的JS代码
2013/10/25 Javascript
jqGrid随窗口大小变化自适应大小的示例代码
2013/12/28 Javascript
JQuery实现当鼠标停留在某区域3秒后自动执行
2014/09/09 Javascript
IE下支持文本框和密码框placeholder效果的JQuery插件分享
2015/01/31 Javascript
浅谈js原生拖放
2016/11/21 Javascript
微信小程序(三):网络请求
2017/01/13 Javascript
jQuery用noConflict代替$的实现方法
2017/04/12 jQuery
Node.js操作redis实现添加查询功能
2017/05/25 Javascript
基于node下的http小爬虫的示例代码
2018/01/11 Javascript
ng-events类似ionic中Events的angular全局事件
2018/09/05 Javascript
JavaScript 九种跨域方式实现原理
2019/02/11 Javascript
vue项目打包后上传至GitHub并实现github-pages的预览
2019/05/06 Javascript
记录vue项目中遇到的一点小问题
2019/05/14 Javascript
怎么使用javascript深度拷贝一个数组
2019/06/06 Javascript
python中copy()与deepcopy()的区别小结
2018/08/03 Python
PyTorch的深度学习入门之PyTorch安装和配置
2019/06/27 Python
python 经典数字滤波实例
2019/12/16 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Python可视化工具如何实现动态图表
2020/10/23 Python
Python实现粒子群算法的示例
2021/02/14 Python
巧克力领导品牌瑞士莲美国官网:Lindt Chocolate美国
2016/08/25 全球购物
文秘应聘自荐书范文
2014/02/18 职场文书
大学四年个人自我小结
2014/03/05 职场文书
学生上课看漫画的检讨书
2014/09/26 职场文书
2015年教师师德师风承诺书
2015/04/28 职场文书