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实现mysql数据库备份类
Mar 20 PHP
php 文件上传系统手记
Oct 26 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
PHP+Mysql+jQuery实现动态展示信息
Oct 08 PHP
解析阿里云ubuntu12.04环境下配置Apache+PHP+PHPmyadmin+MYsql
Jun 26 PHP
又一个PHP实现的冒泡排序算法分享
Aug 21 PHP
php实现过滤表单提交中html标签的方法
Oct 17 PHP
PHP实现的sqlite数据库连接类
Dec 12 PHP
php对文件进行hash运算的方法
Apr 03 PHP
php使用MySQL保存session会话的方法
Jun 26 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
Jul 10 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 数组遍历方法大全(foreach,list,each)
2010/06/30 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
2014/11/18 PHP
php中注册器模式类用法实例分析
2015/11/03 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
PHP删除字符串中非字母数字字符方法总结
2019/01/20 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
javascript function、指针及内置对象
2009/02/19 Javascript
cnblogs csdn 代码运行框实现代码
2009/11/02 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
jQuery 快速结束当前正在执行的动画
2013/11/20 Javascript
Js实现手机发送验证码时按钮延迟操作
2014/06/20 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
2016/06/07 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
jQuery和JavaScript节点插入元素的方法对比
2016/11/18 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
js实现炫酷的左右轮播图
2017/01/18 Javascript
整理关于Bootstrap过渡动画的慕课笔记
2017/03/29 Javascript
Javascript实现信息滚动效果
2017/05/18 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
详解vue slot插槽的使用方法
2017/06/13 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
VUE实现一个分页组件的示例
2017/09/13 Javascript
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
在python中安装basemap的教程
2018/09/20 Python
Python实现iOS自动化打包详解步骤
2018/10/03 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
python 控制台单行刷新,多行刷新实例
2020/02/19 Python
Python Socket多线程并发原理及实现
2020/12/11 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
锐步美国官方网站:Reebok美国
2018/01/10 全球购物
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
学校采购员岗位职责
2014/01/02 职场文书
个人授权委托书范本
2014/04/03 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
傅雷家书读书笔记
2015/06/29 职场文书
一行代码python实现文件共享服务器
2021/04/22 Python