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中Smarty模板初体验
Aug 08 PHP
基于PHP5魔术常量与魔术方法的详解
Jun 13 PHP
PHP使用json_encode函数时不转义中文的解决方法
Nov 12 PHP
两个php日期控制类实例
Dec 09 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
总结PHP中数值计算的注意事项
Aug 14 PHP
Yii2实现中国省市区三级联动实例
Feb 08 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
PHP聊天室简单实现方法详解
Dec 08 PHP
php命名空间设计思想、用法与缺点分析
Jul 17 PHP
PHP创建XML的方法示例【基于DOMDocument类及SimpleXMLElement类】
Sep 10 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 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
星际原理概述
2020/03/04 星际争霸
windows环境下php配置memcache的具体操作步骤
2013/06/09 PHP
PHP函数addslashes和mysql_real_escape_string的区别
2014/04/22 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
DOM下的节点属性和操作小结
2009/05/14 Javascript
jquery选择器-根据多个属性选择示例代码
2013/10/21 Javascript
javascript感应鼠标图片透明度显示的方法
2015/02/24 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
js实现表单检测及表单提示的方法
2015/08/14 Javascript
基于jquery实现图片相关操作(重绘、获取尺寸、调整大小、缩放)
2015/12/25 Javascript
Js apply方法详解
2017/02/16 Javascript
js实现4个方向滚动的球
2017/03/06 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
使用jquery的jsonp如何发起跨域请求及其原理详解
2017/08/17 jQuery
vue项目优化之通过keep-alive数据缓存的方法
2017/12/11 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
JS forEach跳出循环2种实现方法
2020/06/24 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[16:27]DOTA2 HEROS教学视频教你分分钟做大人-艾欧
2014/06/11 DOTA
Python使用Dijkstra算法实现求解图中最短路径距离问题详解
2018/05/16 Python
python实现邮件发送功能
2019/08/10 Python
python采集百度搜索结果带有特定URL的链接代码实例
2019/08/30 Python
利用OpenCV和Python实现查找图片差异
2019/12/19 Python
Python jieba结巴分词原理及用法解析
2020/11/05 Python
pandas针对excel处理的实现
2021/01/15 Python
python实现简单的学生管理系统
2021/02/22 Python
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
《植物妈妈有办法》教学反思
2014/02/25 职场文书
初中学校对照检查材料
2014/08/19 职场文书
公务员检讨书
2014/11/01 职场文书
致三级跳运动员加油稿
2015/07/21 职场文书
教师岗位说明书
2015/09/30 职场文书
使用Mysql计算地址的经纬度距离和实时位置信息
2022/04/29 MySQL