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(视频)Http下载
Dec 12 PHP
一个PHP数组应该有多大的分析
Jul 30 PHP
php压缩多个CSS为一个css的代码并缓存
Apr 21 PHP
不支持fsockopen但支持culr环境下下ucenter与modoer通讯问题
Aug 12 PHP
TMDPHP 模板引擎使用教程
Mar 13 PHP
PHP创建桌面快捷方式的实例代码
Feb 17 PHP
ThinkPHP验证码和分页实例教程
Aug 22 PHP
php输入流php://input使用浅析
Sep 02 PHP
php格式化时间戳显示友好的时间实现思路及代码
Oct 23 PHP
ThinkPHP内置jsonRPC的缺陷分析
Dec 18 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
Laravel中9个不经常用的小技巧汇总
Apr 16 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在程序中将网页生成word文档并提供下载的代码
2012/10/09 PHP
关于PHP堆栈与列队的学习
2013/06/21 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
php中Ioc(控制反转)和Di(依赖注入)
2017/05/07 PHP
JavaScript起点(严格模式深度了解)
2013/01/28 Javascript
Textbox控件注册回车事件及触发按钮提交事件具体实现
2013/03/04 Javascript
js函数排序的实例代码
2013/07/01 Javascript
JS获取下拉列表所选中的TEXT和Value的实现代码
2014/01/11 Javascript
javascript格式化指定日期对象的方法
2015/04/21 Javascript
Jquery 分页插件之Jquery Pagination
2015/08/25 Javascript
jquery对table做排序操作的实例演示
2017/08/10 jQuery
教你用Cordova打包Vue项目的方法
2017/10/17 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
解决koa2 ctx.render is not a function报错问题
2018/08/07 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
Vue.js实现的购物车功能详解
2019/01/27 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
js实现简单选项卡制作
2020/08/05 Javascript
解决VantUI popup 弹窗不弹出或无蒙层的问题
2020/11/03 Javascript
基于python的Tkinter编写登陆注册界面
2017/06/30 Python
Python如何快速实现分布式任务
2017/07/06 Python
python爬虫 正则表达式使用技巧及爬取个人博客的实例讲解
2017/10/20 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
HTML5 Canvas 破碎重组的视频特效的示例代码
2019/09/24 HTML / CSS
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
台湾家适得:Homeget
2019/02/11 全球购物
英文简历中的自我评价
2013/10/06 职场文书
项目管理计划书
2014/01/09 职场文书
中学生个人自我评价
2014/02/06 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
上诉状格式
2015/05/23 职场文书
初一军训感言
2015/08/01 职场文书
入团申请书格式
2019/06/20 职场文书
go goroutine 怎样进行错误处理
2021/07/16 Golang
Tomcat弱口令复现及利用
2022/05/06 Servers