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 self与$this的详解
Jun 08 PHP
php object转数组示例
Jan 15 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
ThinkPHP实现支付宝接口功能实例
Dec 02 PHP
CodeIgniter配置之routes.php用法实例分析
Jan 19 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
Mar 05 PHP
PHP读取文本文件并逐行输出该行使用最多的字符与对应次数的方法
Nov 25 PHP
php基于自定义函数记录log日志方法
Jul 21 PHP
PHP实现时间日期友好显示实现代码
Sep 08 PHP
thinkphp5框架实现数据库读取的数据转换成json格式示例
Oct 10 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 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
PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
2011/12/05 PHP
PHP日志LOG类定义与用法示例
2018/09/06 PHP
iis6+javascript Add an Extension File
2007/06/13 Javascript
SyntaxHighlighter代码加色使用方法
2008/09/07 Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
2009/07/29 Javascript
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
基于JQuery的简单实现折叠菜单代码
2010/09/15 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
js数组去重的常用方法总结
2014/01/24 Javascript
js图片延迟技术一般的思路与示例
2014/03/20 Javascript
深入解读JavaScript中的Hoisting机制
2015/08/12 Javascript
JS实现新浪博客左侧的Blog管理菜单效果代码
2015/10/22 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
2019/03/06 Javascript
小程序getLocation需要在app.json中声明permission字段
2019/04/04 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
python实现随机密码字典生成器示例
2014/04/09 Python
python中使用urllib2伪造HTTP报头的2个方法
2014/07/07 Python
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
python内存管理分析
2015/04/08 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
创建pycharm的自定义python模板方法
2018/05/23 Python
python取余运算符知识点详解
2019/06/27 Python
浅谈Python类中的self到底是干啥的
2019/11/11 Python
Python线程指南分享
2019/11/19 Python
英国最大的经认证的有机超市:Planet Organic
2018/02/02 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
工程专业求职自荐书范文
2014/02/18 职场文书
银行职员自我鉴定
2014/04/20 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
2015秋季运动会通讯稿
2015/07/18 职场文书
2015年学校远程教育工作总结
2015/07/20 职场文书
妇产科护理心得体会
2016/01/22 职场文书
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
2021/09/25 Java/Android