PHP中的类型提示(type hinting)功能介绍


Posted in PHP onJuly 01, 2015

概述

从PHP5开始,我们可以使用类型提示来指定定义函数时,函数接收的参数类型。如果在定义函数时,指定了参数的类型,那么当我们调用函数时,如果实参的类型与指定的类型不符,那么PHP会产生一个致命级别的错误(Catchable fatal error)。

类名称和数组

在定义函数时,PHP只支持两种类型声明:类名称和数组。类名称表名该参数接收的实参为对应类实例化的对象,数组表明接收的实参为数组类型。下面是一个例子:

function demo(array $options){

  var_dump($options);

}

在定义demo()函数的时候,指定了函数接收的参数类型为数组。如果我们调用函数时,传入的参数不是数组类型,例如像下面这样的调用:
$options='options';

demo($options);

那么将产生以下错误:
Catchable fatal error: Argument 1 passed to demo() must be of the type array, string given,

可以使用null作为默认参数

注意

有一点需要特别注意的是,PHP只支持两种类型的类型声明,其他任何标量类型的声明都是不支持的,比如下下面的代码都将产生错误:

function demo(string $str){

}

$str="hello";

demo($str)

当我们运行上面的代码时,string会被当做类名称对待,因此会报下面的错误:
Catchable fatal error: Argument 1 passed to demo() must be an instance of string, string given,

总结

类型声明也是PHP面向对象的一个进步吧,尤其是在捕获某种指定类型的异常时非常有用。
使用类型声明,也可以增加代码的可读性。
但是,由于PHP是弱类型的语言,使用类型声明又于PHP设计的初衷相悖。
到底使用还是不使用类型声明,大家见仁见智吧,本菜鸟不:).

PHP 相关文章推荐
如何在PHP中使用Oracle数据库(1)
Oct 09 PHP
用PHP实现将GB编码转换为UTF8
Nov 25 PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
Jun 13 PHP
php将session放入memcached的设置方法
Feb 14 PHP
phpQuery让php处理html代码像jQuery一样方便
Jan 06 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
Jun 24 PHP
利用php操作memcache缓存的基础方法示例
Aug 02 PHP
PHP基于递归算法解决兔子生兔子问题
May 11 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
php微信公众号开发之欢迎老朋友
Oct 20 PHP
7个鲜为人知却非常实用的PHP函数
Jul 01 #PHP
什么是PEAR?什么是PECL?PHP中两个容易混淆的概念解释
Jul 01 #PHP
php实现的网络相册图片防盗链完美破解方法
Jul 01 #PHP
PHP根据图片色界在不同位置加水印的方法
Jul 01 #PHP
php检测图片主要颜色的方法
Jul 01 #PHP
PHP函数实现从一个文本字符串中提取关键字的方法
Jul 01 #PHP
浅谈php提交form表单
Jul 01 #PHP
You might like
Zend Framework基于Command命令行建立ZF项目的方法
2017/02/18 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
List the Codec Files on a Computer
2007/06/18 Javascript
javascript FormatNumber函数实现方法
2008/12/30 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
JavaScript函数作用域链分析
2015/02/13 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
[50:17]Newbee vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python的ORM框架SQLObject入门实例
2014/04/28 Python
Python实现的几个常用排序算法实例
2014/06/16 Python
在Lighttpd服务器中运行Django应用的方法
2015/07/22 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
浅谈python的输入输出,注释,基本数据类型
2019/04/02 Python
Python列表切片常用操作实例解析
2019/12/16 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
jupyter notebook 多环境conda kernel配置方式
2020/04/10 Python
Python实现敏感词过滤的4种方法
2020/09/12 Python
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
顶丰TOPPIK台湾官网:增发纤维假发,告别秃发困扰
2018/06/13 全球购物
马来西亚最热门的在线时尚商店:FashionValet
2018/11/11 全球购物
意大利在线眼镜精品店:Ottica Lipari
2019/11/11 全球购物
面料业务员岗位职责
2013/12/26 职场文书
2014年应届大学生自我评价
2014/01/09 职场文书
机电一体化应届生求职信范文
2014/01/24 职场文书
交通事故调解协议书
2014/04/16 职场文书
一年级学生评语
2014/04/23 职场文书
公司担保书范文
2014/05/21 职场文书
论群众路线学习心得体会
2014/10/31 职场文书
2014年发展党员工作总结
2014/11/12 职场文书
党员个人承诺书
2015/04/27 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis
详解NodeJS模块化
2021/06/15 NodeJs
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript