PHP中的类型约束介绍


Posted in PHP onMay 11, 2015

PHP的类方法和函数中可实现类型约束,但参数只能指定类、数组、接口、callable 四种类型,参数可默认为NULL,PHP并不能约束标量类型或其它类型。

如下示例:

<?php

 

class Test

{

    public function test_array(array $arr)

    {

        print_r($arr);

    }

 

    public function test_class(Test1 $test1 = null)

    {

        print_r($test1);

    }

 

    public function test_callable(callable $callback, $data)

    {

        call_user_func($callback, $data);

    }

 

    public function test_interface(Traversable $iterator)

    {

        print_r(get_class($iterator));

    }

 

    public function test_class_with_null(Test1 $test1 = NULL)

    {

 

    }

}

 

class Test1{}

 

$test = new Test();

 

//函数调用的参数与定义的参数类型不一致时,会抛出一个可捕获的致命错误。

 

$test->test_array(array(1));

$test->test_class(new Test1());

$test->test_callable('print_r', 1);

$test->test_interface(new ArrayObject(array()));

$test->test_class_with_null();

那么对于标量类型如何约束呢?

PECL扩展库中提供了SPL Types扩展实现interger、float、bool、enum、string类型约束。

$int  = new  SplInt ( 94 );

 

try {

     $int  =  'Try to cast a string value for fun' ;

} catch ( UnexpectedValueException $uve ) {

    echo  $uve -> getMessage () .  PHP_EOL ;

}

 

echo  $int  .  PHP_EOL ;

/*

运行结果:

Value not an integer

94

*/

SPL Types会降低一定的灵活性和性能,实际项目中三思而行。

PHP 相关文章推荐
一个目录遍历函数
Oct 09 PHP
PHP 翻页 实例代码
Aug 07 PHP
PHP中对用户身份认证实现两种方法
Jun 04 PHP
php中删除字符串中最先出现某个字符的实现代码
Feb 03 PHP
php操作mongoDB实例分析
Dec 29 PHP
php在线解压ZIP文件的方法
Dec 30 PHP
高质量PHP代码的50个实用技巧必备(上)
Jan 22 PHP
PHP连接MSSQL方法汇总
Feb 05 PHP
PHP实现文件上传下载实例
Oct 18 PHP
PHP中快速生成随机密码的几种方式
Apr 17 PHP
PHPMAILER实现PHP发邮件功能
Apr 18 PHP
PHP的微信支付接口使用方法讲解
Mar 08 PHP
PHP SPL标准库之接口(Interface)详解
May 11 #PHP
PHP SPL标准库之文件操作(SplFileInfo和SplFileObject)实例
May 11 #PHP
PHP设计模式之适配器模式代码实例
May 11 #PHP
Mac环境下php操作mysql数据库的方法分享
May 11 #PHP
PHP设计模式之装饰者模式代码实例
May 11 #PHP
PHP超牛逼无限极分类生成树方法
May 11 #PHP
php以fastCGI的方式运行时文件系统权限问题及解决方法
May 11 #PHP
You might like
Php连接及读取和写入mysql数据库的常用代码
2014/08/11 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
点击广告后才能获得下载地址
2006/10/26 Javascript
JTrackBar水平拖动效果
2007/07/15 Javascript
js字符编码函数区别分析
2011/12/28 Javascript
JavaScript异步编程Promise模式的6个特性
2014/04/03 Javascript
JavaScript实现页面5秒后自动跳转的方法
2015/04/16 Javascript
无刷新上传文件并返回自定义值
2015/06/11 Javascript
深入浅析JavaScript中prototype和proto的关系
2015/11/15 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
JavaScript实现汉字转换为拼音的库文件示例
2016/12/22 Javascript
JS选取DOM元素常见操作方法实例分析
2018/12/10 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
Vue 中使用富文本编译器wangEditor3的方法
2019/09/26 Javascript
[43:35]EG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python中类型检查的详细介绍
2017/02/13 Python
Python数据结构之单链表详解
2017/09/12 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python实现ip代理池功能示例
2019/07/05 Python
Python程序暂停的正常处理方法
2019/11/07 Python
python编程进阶之异常处理用法实例分析
2020/02/21 Python
Django Model层F,Q对象和聚合函数原理解析
2020/11/12 Python
魅力惠奢品线上平台:MEI.COM
2016/11/29 全球购物
澳大利亚香水在线:Price Rite Mart
2017/12/28 全球购物
印尼在线购买隐形眼镜网站:Lensza.co.id
2019/04/27 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
初中校园之声广播稿
2014/01/15 职场文书
整顿机关作风心得体会
2014/09/10 职场文书
基层领导干部“四风”问题批评与自我批评
2014/09/23 职场文书
个人汇报材料范文
2014/12/30 职场文书
党员个人总结范文
2015/02/14 职场文书
干货:如何写好观后感 !
2019/05/21 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
Spring Boot 实现 WebSocket
2022/04/30 Java/Android