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实现12306余票查询、价格查询示例
Apr 17 PHP
PHP常用编译参数中文说明
Sep 27 PHP
PHP传参之传值与传址的区别
Apr 24 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
Yii使用Captcha验证码的方法
Dec 28 PHP
php导出csv文件,可导出前导0实例代码
Nov 16 PHP
PHP实现的简单操作SQLite数据库类与用法示例
Jun 19 PHP
php中输出json对象的值(实现方法)
Mar 07 PHP
Ajax+PHP实现的删除数据功能示例
Feb 12 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 PHP
KindEditor在php环境下上传图片功能集成的方法示例
Jul 20 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
php获取新浪微博数据API实例
2013/11/12 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
thinkphp框架实现删除和批量删除
2016/06/29 PHP
JavaScript中的new的使用方法与注意事项
2007/05/16 Javascript
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
JavaScript获取指定元素位置的方法
2015/04/08 Javascript
jQuery插件slicebox实现3D动画图片轮播切换特效
2015/04/12 Javascript
js传值后台中文出现乱码的解决方法
2016/06/30 Javascript
浅析JavaScript中的特殊数据类型
2017/12/15 Javascript
关于vue中 $emit的用法详解
2018/04/12 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
详解JSON和JSONP劫持以及解决方法
2019/03/08 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
2019/11/07 Javascript
jquery实现弹窗(系统提示框)效果
2019/12/10 jQuery
python判断字符串是否包含子字符串的方法
2015/03/24 Python
Python 实现简单的shell sed替换功能(实例讲解)
2017/09/29 Python
机器学习python实战之手写数字识别
2017/11/01 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
Python实现的读取文件内容并写入其他文件操作示例
2019/04/09 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
关于Python作用域自学总结
2019/06/10 Python
使用python实现对元素的长截图功能
2019/11/14 Python
Python读取yaml文件的详细教程
2020/07/21 Python
python re的findall和finditer的区别详解
2020/11/15 Python
意大利单身交友网站:Meetic
2020/07/12 全球购物
中班下学期个人总结
2015/02/12 职场文书
pytorch中F.avg_pool1d()和F.avg_pool2d()的使用操作
2021/05/22 Python
MySQL系列之二 多实例配置
2021/07/02 MySQL
Python 中的 copy()和deepcopy()
2021/11/07 Python
java后台调用接口及处理跨域问题的解决
2022/03/24 Java/Android