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 相关文章推荐
JAVA/JSP学习系列之二
Oct 09 PHP
随机广告显示(PHP函数)
Oct 09 PHP
PHP用户指南-cookies部分
Oct 09 PHP
PHP的中问验证码
Nov 25 PHP
DEDE采集大师官方留后门的删除办法
Jan 08 PHP
新手菜鸟必读:session与cookie的区别
Aug 22 PHP
无刷新动态加载数据 滚动条加载适合评论等页面
Oct 16 PHP
PHP数组遍历知识汇总(包含遍历方法、数组指针操作函数、数组遍历测速)
Jul 05 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
php 算法之实现相对路径的实例
Oct 17 PHP
php常用字符串查找函数strstr()与strpos()实例分析
Jun 21 PHP
如何用PHP实现多线程编程
May 26 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中this,self,parent的区别详解
2013/06/08 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
CI框架数据库查询缓存优化的方法
2016/11/21 PHP
PHP生成指定范围内的N个不重复的随机数
2019/03/18 PHP
因str_replace导致的注入问题总结
2019/08/08 PHP
8个超实用的jQuery功能代码分享
2015/01/08 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
js操作table元素实现表格行列新增、删除技巧总结
2015/11/18 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
JS实现显示带倒影的图片横排居中放大展示特效实例【测试可用】
2016/08/23 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
JS+canvas实现的五子棋游戏【人机大战版】
2017/07/19 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
vue+高德地图写地图选址组件的方法
2019/05/18 Javascript
vue-cli3.X快速创建项目的方法步骤
2019/11/14 Javascript
Linux 发邮件磁盘空间监控(python)
2016/04/23 Python
Python使用pyh生成HTML文档的方法示例
2018/03/10 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python 列表、字典和集合的添加和删除操作
2019/12/16 Python
django数据模型(Model)的字段类型解析
2019/12/25 Python
自定义Django默认的sitemap站点地图样式
2020/03/04 Python
纯CSS3编写的的精美动画进度条(无flash/无图像/无脚本/附源码)
2013/01/07 HTML / CSS
澳大利亚家具和家居用品购物网站:Zanui
2018/12/29 全球购物
土木工程专业个人求职信
2013/12/05 职场文书
后勤主管工作职责
2013/12/07 职场文书
秋季运动会稿件
2014/01/30 职场文书
街道党工委党的群众路线教育实践活动对照检查材料思想汇报
2014/10/05 职场文书
2014年办公室文员工作总结
2014/11/12 职场文书
党员转正介绍人意见
2015/06/03 职场文书
医者仁心观后感
2015/06/17 职场文书
单位证明范文
2015/06/18 职场文书
MySQL 数据库 增删查改、克隆、外键 等操作
2022/05/11 MySQL