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 相关文章推荐
抓取YAHOO股票报价的类
May 15 PHP
PHP strtotime函数详解
Dec 18 PHP
PHP 时间日期操作实战
Aug 26 PHP
codeigniter集成ucenter1.6双向通信的解决办法
Jun 12 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
php去除字符串中空字符的常用方法小结
Mar 17 PHP
php根据用户语言跳转相应网页
Nov 04 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
PHP实现多级分类生成树的方法示例
Feb 07 PHP
解决laravel 5.1报错:No supported encrypter found的办法
Jun 07 PHP
php 函数中静态变量使用的问题实例分析
Mar 05 PHP
thinkphp5.1框架模板赋值与变量输出示例
May 25 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 星际争霸
WIN98下Apache1.3.14+PHP4.0.4的安装
2006/10/09 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
php数组索引的Key加引号和不加引号的区别
2014/08/19 PHP
PHP中的类型约束介绍
2015/05/11 PHP
PHP Yii框架之表单验证规则大全
2015/11/16 PHP
Zend Framework框架之Zend_Mail实现发送Email邮件验证功能及解决标题乱码的方法
2016/03/21 PHP
JavaScript中void(0)的具体含义解释
2007/02/27 Javascript
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
分享一个自己写的简单的javascript分页组件
2015/02/15 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
基于jQuery 实现bootstrapValidator下的全局验证
2015/12/07 Javascript
手机Web APP如何实现分享多平台功能
2016/08/19 Javascript
js上传图片预览的实现方法
2017/05/09 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
JavaScript实现简单生成随机颜色的方法
2017/09/21 Javascript
[44:58]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第二场
2018/04/06 DOTA
python写的一个squid访问日志分析的小程序
2014/09/17 Python
Python2随机数列生成器简单实例
2017/09/04 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
对python函数签名的方法详解
2019/01/22 Python
使用虚拟环境打包python为exe 文件的方法
2019/08/29 Python
Python如何解除一个装饰器
2020/08/07 Python
python super()函数的基本使用
2020/09/10 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
全球速卖通:AliExpress(国际版淘宝)
2017/09/20 全球购物
绢花、人造花和人造花卉:BLOOM
2019/08/07 全球购物
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
生产内勤岗位职责
2013/12/07 职场文书
2014两会学习心得:时代的发展
2014/03/17 职场文书
庆七一活动总结
2014/08/27 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
《玩出了名堂》教学反思
2016/02/17 职场文书
试用1103暨1103、1101同门大比武 [ DAIWEI ]
2022/04/05 无线电