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 中执行系统外部命令
Oct 09 PHP
ajax+php打造进度条 readyState各状态
Mar 20 PHP
来自phpguru得Php Cache类源码
Apr 15 PHP
PHP跳转页面的几种实现方法详解
Jun 08 PHP
PHP获取当前url的具体方法全面解析
Nov 26 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
Oct 30 PHP
php getcwd与dirname(__FILE__)区别详解
Sep 24 PHP
PHP中串行化用法示例
Nov 16 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
Mar 01 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
Dec 02 PHP
ThinkPHP5与单元测试PHPUnit使用详解
Feb 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
用PHP实现的随机广告显示代码
2007/06/14 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
php中opendir函数用法实例
2014/11/15 PHP
PHP读书笔记_运算符详解
2016/07/01 PHP
php使用json_decode后数字对象转换成了科学计数法的解决方法
2017/02/20 PHP
PHP以json或xml格式返回请求数据的方法
2018/05/31 PHP
javascript jQuery $.post $.ajax用法
2008/07/09 Javascript
JavaScript类和继承 constructor属性
2010/03/04 Javascript
Js实现双击鼠标自动滚动屏幕的示例代码
2013/12/14 Javascript
PHP守护进程实例
2015/03/06 Javascript
jquery带下拉菜单和焦点图代码分享
2015/08/24 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
AngularJS指令与指令之间的交互功能示例
2016/12/14 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
JavaScript屏蔽Backspace键的实现代码
2017/11/02 Javascript
vue的for循环使用方法
2019/02/12 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
Laravel 如何在blade文件中使用Vue组件的示例代码
2020/06/28 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
Python对象与引用的介绍
2019/01/24 Python
SportsDirect.com新加坡:英国第一体育零售商
2019/03/30 全球购物
人事主管的岗位职责
2013/11/16 职场文书
运动会横幅标语
2014/06/17 职场文书
战略性融资合作协议书范本
2014/10/17 职场文书
2014年六五普法工作总结
2014/11/25 职场文书
2015中秋节慰问信范文
2015/03/23 职场文书
2015年社区流动人口工作总结
2015/05/12 职场文书
怎样写家长意见
2015/06/04 职场文书
python pyhs2 的安装操作
2021/04/07 Python
win10输入法不见了只能打出字母怎么解决?
2022/08/05 数码科技