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+MYSQL开发工具及资源收藏
Jan 02 PHP
php trim 去除空字符的定义与语法介绍
May 31 PHP
基于PHP选项与信息函数的使用详解
May 10 PHP
Smarty中的注释和截断功能介绍
Apr 09 PHP
php实现判断访问来路是否为搜索引擎机器人的方法
Apr 15 PHP
php数组函数array_key_exists()小结
Dec 10 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
Dec 16 PHP
Thinkphp实现自动验证和自动完成
Dec 19 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
PHP简单实现正则匹配省市区的方法
Apr 13 PHP
PHP PDOStatement::execute讲解
Jan 31 PHP
php array_map()函数实例用法
Mar 03 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中的Session和Cookie
2013/06/21 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
js 解决“options为空或不是对象”
2008/12/22 Javascript
fixedBox固定div漂浮代码支持ie6以上大部分主流浏览器
2014/06/26 Javascript
关闭页面时window.location事件未执行的原因分析及解决方案
2014/09/01 Javascript
如何用js实现鼠标向上滚动时浮动导航
2016/07/18 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
jQuery tagsinput在h5邮件客户端中应用详解
2016/09/26 Javascript
JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码
2017/03/25 Javascript
Node.js利用debug模块打印出调试日志的方法
2017/04/25 Javascript
vue监听scroll的坑的解决方法
2017/09/07 Javascript
vue综合组件间的通信详解
2017/11/06 Javascript
React Native 真机断点调试+跨域资源加载出错问题的解决方法
2018/01/18 Javascript
webpack公共组件引用路径简化小技巧
2018/06/15 Javascript
在Layui 的表格模板中,实现layer父页面和子页面传值交互的方法
2019/09/10 Javascript
vue+springboot图片上传和显示的示例代码
2020/02/14 Javascript
JavaScript实现电灯开关小案例
2020/03/30 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
wxPython窗口中文乱码解决方法
2014/10/11 Python
Python求导数的方法
2015/05/09 Python
浅谈python中的getattr函数 hasattr函数
2016/06/14 Python
Python Flask前后端Ajax交互的方法示例
2018/07/31 Python
python实现翻译word表格小程序
2020/02/27 Python
在Django中预防CSRF攻击的操作
2020/03/13 Python
微信浏览器取消缓存的方法
2015/03/28 HTML / CSS
HTML5、Select下拉框右边加图标的实现代码(增进用户体验)
2017/10/16 HTML / CSS
Omio西班牙:全欧洲低价大巴、火车和航班搜索和比价
2017/02/11 全球购物
校园创业策划书
2014/01/14 职场文书
初级会计求职信范文
2014/02/15 职场文书
实习计划书范文
2015/01/16 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
正规欠条模板
2015/07/03 职场文书
mysql5.7使用binlog 恢复数据的方法
2021/06/03 MySQL
Python实现PIL图像处理库绘制国际象棋棋盘
2021/07/16 Python
俄罗斯十大城市人口排名,第三首都仅排第六,第二是北方首都
2022/03/20 杂记
阿里云国际版 使用Nginx作为HTTPS转发代理服务器
2022/05/11 Servers