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 URL路由类实例
Nov 12 PHP
codeigniter自带数据库类使用方法说明
Mar 25 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
简单理解PHP的面向对象编程方式
May 17 PHP
如何判断php mysqli扩展类是否开启
Dec 24 PHP
详解使用php调用微信接口上传永久素材
Apr 11 PHP
Yii框架实现记录日志到自定义文件的方法
May 23 PHP
PHP针对伪静态的注入总结【附asp与Python相关代码】
Aug 01 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 PHP
PhpStorm 如何优雅的调试Hyperf的方法步骤
Nov 24 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读取30天之内的根据算法排序的代码
2008/04/06 PHP
PHP获取文件绝对路径的代码(上一级目录)
2011/05/29 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
9个javascript语法高亮插件 推荐
2009/07/18 Javascript
AngularJS的内置过滤器详解
2015/05/14 Javascript
深入理解jQuery之防止冒泡事件
2016/05/24 Javascript
javascript获取select标签选中的值
2016/06/04 Javascript
jquery ajax结合thinkphp的getjson实现跨域的方法
2016/06/06 Javascript
JSONP跨域请求实例详解
2016/07/04 Javascript
jQuery实现鼠标经过购物车出现下拉框代码(推荐)
2016/07/21 Javascript
BootStrap 附加导航组件
2016/07/22 Javascript
Bootstrap企业网站实战项目4
2016/10/14 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
JS自定义滚动条效果简单实现代码
2020/10/27 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
解决JavaScript layui 下拉框不显示的问题
2018/08/14 Javascript
laydate如何根据开始时间或者结束时间限制范围
2018/11/15 Javascript
vue-cli 3如何使用vue-bootstrap-datetimepicker日期插件
2021/02/20 Vue.js
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
Python使用装饰器模拟用户登陆验证功能示例
2018/08/24 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Django缓存系统实现过程解析
2019/08/02 Python
Django实现CAS+OAuth2的方法示例
2019/10/30 Python
在python tkinter界面中添加按钮的实例
2020/03/04 Python
CSS3模块的目前的状况分析
2010/02/24 HTML / CSS
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
印尼最大的网上书店:Gramedia.com
2018/09/13 全球购物
Java的for语句中break, continue和return的区别
2013/12/19 面试题
大学生的网上创业计划书
2013/12/31 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
2014年城管个人工作总结
2014/12/08 职场文书
部门主管竞聘书
2015/09/15 职场文书