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 相关文章推荐
支持oicq头像的留言簿(二)
Oct 09 PHP
php 生成随机验证码图片代码
Feb 08 PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
PHP图片自动裁切应付不同尺寸的显示
Oct 16 PHP
ThinkPHP实现递归无级分类――代码少
Jul 29 PHP
变量在 PHP7 内部的实现(一)
Dec 21 PHP
php 伪造HTTP_REFERER页面URL来源的三种方法
Sep 22 PHP
yii2 数据库读写分离配置示例
Feb 10 PHP
PHP实现数组转JSon和JSon转数组的方法示例
Jun 14 PHP
Swoole实现异步投递task任务案例详解
Apr 02 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
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
PHP单例模式模拟Java Bean实现方法示例
2018/12/07 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
PHP基于phpqrcode类生成二维码的方法示例详解
2020/08/07 PHP
JavaScript监测ActiveX控件是否已经安装过的代码
2008/09/02 Javascript
非阻塞动态加载javascript广告实现代码
2010/11/17 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
js点击button按钮跳转到另一个新页面
2014/10/10 Javascript
EasyUi datagrid 实现表格分页
2015/02/10 Javascript
javascript实现链接单选效果的方法
2015/05/13 Javascript
JavaScript实现对下拉列表值进行排序的方法
2015/07/15 Javascript
jQuery动画效果实现图片无缝连续滚动
2016/01/12 Javascript
使用jquery.form.js实现图片上传的方法
2016/05/05 Javascript
AngularJS表格添加序号的方法
2017/03/03 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
js针对图片加载失败的处理方法分析
2019/08/24 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
解决vue项目F5刷新mounted里的函数不执行问题
2019/11/05 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
在Linux命令行终端中使用python的简单方法(推荐)
2017/01/23 Python
对pandas的层次索引与取值的新方法详解
2018/11/06 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
Tensorflow中的dropout的使用方法
2020/03/13 Python
python退出循环的方法
2020/06/18 Python
详解python tcp编程
2020/08/24 Python
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
平面网站制作专科生的自我评价分享
2013/12/11 职场文书
应聘护理专业毕业自荐书范文
2014/02/12 职场文书
车间核算员岗位职责
2014/07/01 职场文书
教师个人读书活动总结
2014/07/08 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
工程安全生产协议书
2014/11/21 职场文书
国庆阅兵观后感
2015/06/15 职场文书
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript