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版(2)
Oct 09 PHP
php 分库分表hash算法
Nov 12 PHP
PHP数据流应用的一个简单实例
Sep 14 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
Jun 12 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
Jul 23 PHP
PHP的邮件群发系统phplist配置方法详细总结
Mar 30 PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 PHP
php 二维数组快速排序算法的实现代码
Oct 17 PHP
php实现每日签到功能
Nov 29 PHP
什么是PHP7中的孤儿进程与僵尸进程
Apr 14 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 PHP
TP5框架页面跳转样式操作示例
Apr 05 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 如何向 MySQL 发送数据
2006/10/09 PHP
PHP 设置MySQL连接字符集的方法
2011/01/02 PHP
用PHP解决的一个栈的面试题
2014/07/02 PHP
wordpress网站转移到本地运行测试的方法
2017/03/15 PHP
PHP实现对xml的增删改查操作案例分析
2017/05/19 PHP
浅谈PHP中pack、unpack的详细用法
2018/03/12 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
Javascript倒计时代码
2010/08/12 Javascript
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
js实现连续英文字符自动换行兼容ie6 ie7和firefox
2013/09/06 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
判断及设置浏览器全屏模式
2014/04/20 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
轻松实现javascript数据双向绑定
2015/11/11 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
vue实现导航栏效果(选中状态刷新不消失)
2017/12/13 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
JS实现随机点名器
2020/04/12 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
python中Flask框架简单入门实例
2015/03/21 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
Python 获取命令行参数内容及参数个数的实例
2019/12/20 Python
销售所有的狗狗产品:Dog.com
2016/10/13 全球购物
英国领先的酒类网上商城:TheDrinkShop
2017/03/16 全球购物
英国露营设备和户外服装购物网站:Simply Hike
2019/05/05 全球购物
大学生未来职业生涯规划书
2014/02/15 职场文书
《植物妈妈有办法》教学反思
2014/02/25 职场文书
学习经验交流会主持词
2014/04/01 职场文书
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
浅谈Python实现opencv之图片色素的数值运算和逻辑运算
2021/06/23 Python
C3 线性化算法与 MRO之Python中的多继承
2021/10/05 Python
解决xampp安装后Apache无法启动
2022/03/21 Servers
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS