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的5个入手程序
Nov 23 PHP
PHP基础陷阱题(变量赋值)
Sep 12 PHP
如何设置mysql允许外网访问
Jun 04 PHP
解析PHP中empty is_null和isset的测试
Jun 29 PHP
PHP-Fcgi下PHP的执行时间设置方法
Aug 02 PHP
PHP入门经历和学习过程分享
Apr 11 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
Jun 25 PHP
php检查字符串中是否包含7位GSM字符的方法
Mar 17 PHP
php eval函数一句话木马代码
May 21 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
PHP判断是否是json字符串
Apr 01 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
Linux中为php配置伪静态
2014/12/17 PHP
php短址转换实现方法
2015/02/25 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
JavaScript 判断判断某个对象是Object还是一个Array
2010/01/28 Javascript
js实现jquery的offset()方法实例
2015/01/10 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
VueJs单页应用实现微信网页授权及微信分享功能示例
2017/07/26 Javascript
node中koa中间件机制详解
2017/08/22 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
2018/01/21 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
Vue项目全局配置页面缓存之按需读取缓存的实现详解
2018/08/01 Javascript
Vue项目History模式404问题解决方法
2018/10/31 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
vue 实现强制类型转换 数字类型转为字符串
2019/11/07 Javascript
JavaScript自定义超时API代码实例
2020/04/30 Javascript
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
python 文件与目录操作
2008/12/24 Python
Python输出带颜色的字符串实例
2017/10/10 Python
人机交互程序 python实现人机对话
2017/11/14 Python
pip安装时ReadTimeoutError的解决方法
2018/06/12 Python
python使用wxpy轻松实现微信防撤回的方法
2019/02/21 Python
Python enumerate内置库用法解析
2020/02/24 Python
安全的后院和健身蹦床:JumpSport
2019/07/15 全球购物
俄罗斯皮肤健康中心:Pharmacosmetica.ru
2020/02/22 全球购物
护士辞职信模板
2014/01/20 职场文书
高二物理教学反思
2014/02/08 职场文书
六查六看剖析材料
2014/02/15 职场文书
部队个人年终总结
2015/03/02 职场文书
2015年档案管理工作总结
2015/04/08 职场文书
七年级作文之关于奶奶
2019/10/29 职场文书
基于Nginx实现限制某IP短时间访问次数
2021/03/31 Servers
解决Golang中goroutine执行速度的问题
2021/05/02 Golang
Docker下安装Oracle19c
2022/04/13 Servers
Android 界面一键变灰 深色主题工具类
2022/04/28 Java/Android