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获得用户使用的代理服务器ip即真实ip
Dec 31 PHP
PHP memcache扩展的三种安装方法
Apr 26 PHP
ThinkPHP调用百度翻译类实现在线翻译
Jun 26 PHP
PHP下通过QRCode类库创建中间带网站LOGO的二维码
Jul 12 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
Oct 15 PHP
初识Laravel
Oct 30 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
php中上传文件的的解决方案
Sep 25 PHP
php文件操作之文件写入字符串、数组的方法分析
Apr 15 PHP
php设计模式之观察者模式定义与用法经典示例
Sep 19 PHP
使用laravel根据用户类型来显示或隐藏字段
Oct 17 PHP
通过代码实例解析PHP session工作原理
Dec 11 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递归返回值时出现的问题解决办法
2013/02/19 PHP
PHP遍历某个目录下的所有文件和子文件夹的实现代码
2013/06/28 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
php实用代码片段整理
2016/11/12 PHP
CodeIgniter整合Smarty的方法详解
2017/08/25 PHP
在线游戏大家来找茬II
2006/09/30 Javascript
Javascript 面向对象(三)接口代码
2012/05/23 Javascript
node.js中的http.response.write方法使用说明
2014/12/14 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
Bootstrap Metronic完全响应式管理模板学习笔记
2016/07/08 Javascript
JavaScript运动框架 解决防抖动问题、悬浮对联(二)
2017/05/17 Javascript
JavaScript设置名字输入不合法的实现方法
2017/05/23 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
webpack的CSS加载器的使用
2018/09/11 Javascript
BootStrap表单验证中的非Submit类型按钮点击时触发验证的坑
2019/09/05 Javascript
在layui框架中select下拉框监听更改事件的例子
2019/09/20 Javascript
基于JS+HTML实现弹窗提示是否确认提交功能
2020/06/17 Javascript
利用Python绘制MySQL数据图实现数据可视化
2015/03/30 Python
Python中的ctime()方法使用教程
2015/05/22 Python
详解Python的Flask框架中生成SECRET_KEY密钥的方法
2016/06/07 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
Python实现提取XML内容并保存到Excel中的方法
2018/09/01 Python
详解python中的数据类型和控制流
2019/08/08 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
pytorch 实现删除tensor中的指定行列
2020/01/13 Python
佳能加拿大网上商店:Canon eStore Canada
2018/04/04 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
Java基础面试题
2012/11/02 面试题
养殖人员的创业计划书范文
2013/12/26 职场文书
交通安全演讲稿
2014/01/07 职场文书
求职简历的自我评价
2014/01/31 职场文书
美术教学感言
2014/02/22 职场文书
2014年人力资源部工作总结
2014/11/19 职场文书
2014年语文教师工作总结
2014/12/18 职场文书
同学会演讲稿
2019/04/02 职场文书