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编写的导航条程序
Oct 09 PHP
PHP实现用户认证及管理完全源码
Mar 11 PHP
php面向对象的方法重载两种版本比较
Sep 08 PHP
php中防止伪造跨站请求的小招式
Sep 02 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
PHP获取当前所在目录位置的方法
Nov 26 PHP
php+xml编程之xpath的应用实例
Jan 24 PHP
PHP中类属性与类静态变量的访问方法示例
Jul 13 PHP
php实现用户登陆简单实例
Apr 04 PHP
php实现session共享的实例方法
Sep 19 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 PHP
Thinkphp 框架扩展之行为扩展原理与实现方法分析
Apr 23 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
oracle资料库函式库
2006/10/09 PHP
php URL编码解码函数代码
2009/03/10 PHP
Zend Framework中的简单工厂模式 图文
2012/07/10 PHP
仿服务器端脚本方式的JS模板实现方法
2007/04/27 Javascript
JavaScript 三种不同位置代码的写法
2009/10/25 Javascript
让table变成exls的示例代码
2014/03/24 Javascript
js跨浏览器的事件侦听器和事件对象的使用方法
2015/12/17 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
基于jQuery和hwSlider实现内容左右滑动切换效果附源码下载(一)
2016/06/22 Javascript
微信小程序 Flex布局详解
2016/10/09 Javascript
BootStrapTable服务器分页实例解析
2016/12/20 Javascript
Vue.js中extend选项和delimiters选项的比较
2017/07/17 Javascript
使用Vue做一个简单的todo应用的三种方式的示例代码
2018/10/20 Javascript
Vue.js实现可排序的表格组件功能示例
2019/02/19 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
2019/12/10 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
2020/02/07 Javascript
python操作xml文件详细介绍
2014/06/09 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
微信小程序跳一跳游戏 python脚本跳一跳刷高分技巧
2018/01/04 Python
基于django channel实现websocket的聊天室的方法示例
2019/04/11 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
Python生成验证码、计算具体日期是一年中的第几天实例代码详解
2019/10/16 Python
Python数据可视化:泊松分布详解
2019/12/07 Python
Python如何实现爬取B站视频
2020/05/20 Python
HTML5 Blob对象的具体使用
2020/05/22 HTML / CSS
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
世界上最具创新性的增强型知名运动品牌:Proviz
2018/04/03 全球购物
PHP面试题集
2016/12/18 面试题
担保书怎么写
2014/04/01 职场文书
委托书格式
2014/08/01 职场文书
党支部班子“四风”问题自我剖析材料
2014/09/28 职场文书
欢迎词怎么写
2015/01/23 职场文书
小学端午节活动总结
2015/02/11 职场文书
财务人员廉洁自律心得体会
2016/01/13 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL