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 相关文章推荐
phpBB BBcode处理的漏洞
Oct 09 PHP
隐藏你的.php文件的实现方法
Mar 19 PHP
PHP 加密/解密函数 dencrypt(动态密文,带压缩功能,支持中文)
Jan 30 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
基于PHP的简单采集数据入库程序【续篇】
Jul 30 PHP
smarty中js的调用方法示例
Oct 27 PHP
php关联数组快速排序的方法
Apr 17 PHP
php实现Session存储到Redis
Nov 11 PHP
Zend Framework教程之Application用法实例详解
Mar 14 PHP
SSO单点登录的PHP实现方法(Laravel框架)
Mar 23 PHP
PHP如何将XML转成数组
Apr 04 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 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脚本中include文件出错解决方法
2008/11/20 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
jquery实现输入框动态增减的实例代码
2013/07/14 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
javascript中数组的定义及使用实例
2015/01/21 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
jQuery实现公告新闻自动滚屏效果实例代码
2016/07/14 Javascript
Node.js获取前端ajax提交的request信息
2017/02/20 Javascript
angular学习之从零搭建一个angular4.0项目
2017/07/10 Javascript
JS遍历DOM文档树的方法实例详解
2018/04/03 Javascript
Vue中的Props(不可变状态)
2018/09/29 Javascript
JavaScript中的"=、==、==="区别讲解
2019/01/22 Javascript
jQuery 添加元素和删除元素的方法
2020/07/15 jQuery
[34:56]Ti4冒泡赛LGD vs Liquid 1
2014/07/14 DOTA
[44:50]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 TNC vs VG
2018/04/02 DOTA
Eclipse + Python 的安装与配置流程
2013/03/05 Python
Python中下划线的使用方法
2015/03/27 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
2017/09/08 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
python-tkinter之按钮的使用,开关方法
2019/06/11 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
python爬虫泛滥的解决方法详解
2020/11/25 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
浅析与CSS3的loading动画加载相关的transition优化
2015/05/18 HTML / CSS
全球知名旅游社区法国站点:TripAdvisor法国
2016/08/03 全球购物
珍珠鸟教学反思
2014/02/01 职场文书
汽车维修求职信
2014/06/15 职场文书
关于国庆节的演讲稿
2014/09/05 职场文书
秋季运动会演讲稿
2014/09/16 职场文书
公安机关查摆剖析材料
2014/10/10 职场文书
辞职信怎么写
2015/02/27 职场文书
2016新年感言
2015/08/03 职场文书
爱国主题班会教案
2015/08/14 职场文书
MySQL 表空间碎片的概念及相关问题解决
2021/05/07 MySQL