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 相关文章推荐
JoshChen_web格式编码UTF8-无BOM的小细节分析
Aug 16 PHP
更改localhost为其他名字的方法
Feb 10 PHP
PHP中ini_set和ini_get函数的用法小结
Feb 18 PHP
采用ThinkPHP中F方法实现快速缓存实例
Jun 13 PHP
解密ThinkPHP3.1.2版本之独立分组功能应用
Jun 19 PHP
php示例详解Constructor Prototype Pattern 原型模式
Oct 15 PHP
php抓取网站图片并保存的实现方法
Oct 29 PHP
浅谈thinkphp5 instance 的简单实现
Jul 30 PHP
laravel中的一些简单实用功能
Nov 03 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
Feb 21 PHP
解决PHPstudy Apache无法启动的问题【亲测有效】
Oct 30 PHP
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
Apr 01 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实现无限极分类图文教程
2014/11/25 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
php防止表单重复提交实例讲解
2019/02/11 PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
2020/02/10 PHP
JavaScript中Array 对象相关的几个方法
2006/12/22 Javascript
根据分辩率调用不同的CSS.
2007/01/08 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件
2010/08/24 Javascript
jquery $("#variable") 循环改变variable的值示例
2014/02/23 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
jQuery复制表单元素附源码分享效果演示
2015/09/30 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
JS实现的tab切换选项卡效果示例
2017/02/28 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
js获取地址栏参数的两种方法
2017/06/27 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
three.js 入门案例详解
2018/01/23 Javascript
python定时器(Timer)用法简单实例
2015/06/04 Python
Python使用Windows API创建窗口示例【基于win32gui模块】
2018/05/09 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
python opencv 批量改变图片的尺寸大小的方法
2019/06/28 Python
python画双y轴图像的示例代码
2019/07/07 Python
python GUI库图形界面开发之PyQt5信号与槽基本操作
2020/02/25 Python
Django+boostrap 美化admin后台的操作
2020/03/11 Python
PyTorch的torch.cat用法
2020/06/28 Python
解决c++调用python中文乱码问题
2020/07/29 Python
世界上最大的冷却器制造商:Igloo Coolers
2019/07/23 全球购物
Emma Bridgewater官网:英国餐具制造商
2019/11/24 全球购物
俄罗斯香水和化妆品在线商店:Aroma-butik
2020/02/28 全球购物
护士自我评价范文
2014/01/25 职场文书
四风问题自查报告剖析材料
2014/02/08 职场文书
广播体操比赛口号
2014/06/10 职场文书
个人违纪检讨书
2014/09/15 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server