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 相关文章推荐
简单的页面缓冲技术
Oct 09 PHP
PHP版网站缓存加快打开速度的方法分享
Jun 03 PHP
php读取txt文件组成SQL并插入数据库的代码(原创自Zjmainstay)
Jul 31 PHP
基于php常用函数总结(数组,字符串,时间,文件操作)
Jun 27 PHP
测试PHP连接MYSQL成功与否的代码
Aug 16 PHP
根据中文裁减字符串函数的php代码
Dec 03 PHP
php中session退出登陆问题
Feb 27 PHP
php常用文件操作函数汇总
Nov 22 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
Dec 21 PHP
thinkPHP框架实现类似java过滤器的简单方法示例
Sep 05 PHP
PHP parse_ini_file函数的应用与扩展操作示例
Jan 07 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
Nov 13 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+MySQL的聊天室设计
2006/10/09 PHP
PHP调用三种数据库的方法(3)
2006/10/09 PHP
php preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
全面解析PHP操作Memcache基本函数
2016/07/14 PHP
PHP中list方法用法示例
2016/12/01 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
PHP函数积累总结
2019/03/19 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
实现连缀调用的map方法(prototype)
2009/08/05 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
Javascript 学习笔记之 对象篇(二) : 原型对象
2014/06/24 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
基于vue.js路由参数的实例讲解——简单易懂
2017/09/07 Javascript
vue mounted组件的使用
2018/06/18 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
js与jquery获取input输入框中的值实例讲解
2020/02/27 jQuery
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
Python 返回汉字的汉语拼音
2009/02/27 Python
python目录与文件名操作例子
2016/08/28 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
python 2.7.14安装图文教程
2018/04/08 Python
Python中整数的缓存机制讲解
2019/02/16 Python
Python编写打字训练小程序
2019/09/26 Python
python生成大写32位uuid代码
2020/03/03 Python
STP的判定过程
2012/10/01 面试题
木马的传播途径主要有哪些
2016/04/08 面试题
新闻编辑自荐信
2013/11/03 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
抗洪救灾先进集体事迹材料
2014/05/26 职场文书
设备售后服务承诺书
2014/05/30 职场文书
教师创先争优承诺书
2015/04/27 职场文书
使用Html+Css实现简易导航栏功能(导航栏遇到鼠标切换背景颜色)
2021/04/07 HTML / CSS
详解php中流行的rpc框架
2021/05/29 PHP
WCG2010 星际争霸决赛 Flash vs Goojila 1 星际经典比赛回顾
2022/04/01 星际争霸