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 相关文章推荐
dedecms采集中可以过滤多行代码的正则表达式
Mar 17 PHP
生成卡号php代码
Apr 09 PHP
使用PHPMYADMIN操作mysql数据库添加新用户和数据库的方法
Apr 02 PHP
php中过滤非法字符的具体实现
Oct 29 PHP
PHP中echo,print_r与var_dump区别分析
Sep 29 PHP
php自定义中文字符串截取函数substr_for_gb2312及substr_for_utf8示例
May 28 PHP
[原创]php使用curl判断网页404(不存在)的方法
Jun 23 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
浅谈PHP中关于foreach使用引用变量的坑
Nov 14 PHP
详解PHP5.6.30与Apache2.4.x配置
Jun 02 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
PHP whois查询类定义与用法示例
Apr 03 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实现ip白名单黑名单功能
2015/03/12 PHP
Laravel中validation验证 返回中文提示 全局设置的方法
2019/09/29 PHP
use jscript List Installed Software
2007/06/11 Javascript
ASP.NET jQuery 实例8 (动态添加内容到DropDownList)
2012/02/03 Javascript
前端开发过程中浏览器版本的两种判定方法
2013/10/30 Javascript
JS判断不能为空实例代码
2013/11/26 Javascript
jQuery基于当前元素进行下一步的遍历
2014/05/20 Javascript
Lab.js初次使用笔记
2015/02/28 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
探讨JavaScript语句的执行过程
2016/01/28 Javascript
Vue 短信验证码组件开发详解
2017/02/14 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
JavaScript实现三级级联特效
2017/11/05 Javascript
angular之ng-template模板加载
2017/11/09 Javascript
vue中v-model的应用及使用详解
2018/06/27 Javascript
jQuery zTree插件快速实现目录树
2019/08/16 jQuery
微信小程序实现图片翻转效果的实例代码
2019/09/20 Javascript
JS实现容器模块左右拖动效果
2020/01/14 Javascript
[01:11]steam端dota2实名认证操作流程视频
2021/03/11 DOTA
Python ljust rjust center输出
2008/09/06 Python
wxPython中文教程入门实例
2014/06/09 Python
Python函数参数类型*、**的区别
2015/04/11 Python
python排序方法实例分析
2015/04/30 Python
python函数式编程学习之yield表达式形式详解
2018/03/25 Python
Python3.6基于正则实现的计算器示例【无优化简单注释版】
2018/06/14 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
描述RIP和OSPF区别以及特点
2015/01/17 面试题
钳工实习自我鉴定
2013/09/19 职场文书
经典安踏广告词
2014/03/21 职场文书
实验心得体会
2014/09/05 职场文书
电影地道战观后感
2015/06/04 职场文书
某药房的新员工入职告知书!
2019/07/15 职场文书