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 相关文章推荐
php xml实例 留言本
Mar 20 PHP
php下正则来匹配dede模板标签的代码
Aug 21 PHP
PHP __autoload()方法真的影响性能吗?
Mar 30 PHP
PHP中读取照片exif信息的方法
Aug 20 PHP
PHP进程同步代码实例
Feb 12 PHP
PHP微信开发之有道翻译
Jun 23 PHP
Redis使用Eval多个键值自增的操作实例
Nov 04 PHP
PHP利用超级全局变量$_GET来接收表单数据的实例
Nov 05 PHP
PHP实现的贪婪算法实例
Oct 17 PHP
PHP操作Redis常用技巧总结
Apr 24 PHP
实例解析php的数据类型
Oct 24 PHP
PHP并发场景的三种解决方案代码实例
Feb 27 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
IStream与TStream之间的相互转换
2008/08/01 PHP
探讨Smarty中如何获取数组的长度以及smarty调用php函数的详解
2013/06/20 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
简单实用的网站PHP缓存类实例
2014/07/18 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
基于jquery用于查询操作的实现代码
2010/05/10 Javascript
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
jquery实现固定顶部导航效果(仿蘑菇街)
2013/03/21 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
JS连连看源码完美注释版(推荐)
2013/12/09 Javascript
基于jQuery实现复选框的全选 全不选 反选功能
2014/11/24 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
jQuery超赞的评分插件(8款)
2015/08/20 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
js中对象与对象创建方法的各种方法
2019/02/27 Javascript
微信小程序云开发(数据库)详解
2019/05/17 Javascript
微信小程序之下拉列表实现方法解析(附完整源码)
2019/08/23 Javascript
javascript中call,apply,bind的区别详解
2020/12/11 Javascript
[01:14:10]2014 DOTA2国际邀请赛中国区预选赛 SPD-GAMING VS Orenda
2014/05/22 DOTA
python的几种开发工具介绍
2007/03/07 Python
Python面向对象之类的定义与继承用法示例
2019/01/14 Python
解析PyCharm Python运行权限问题
2020/01/08 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
HTML5 drag和drop具体使用详解
2021/01/18 HTML / CSS
捷克街头、运动和滑板一站式商店:BoardStar.cz
2019/10/06 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
求职自荐信格式
2013/12/04 职场文书
教堂婚礼主持词
2014/03/14 职场文书
有关九一八事变的演讲稿
2014/09/14 职场文书
员工家属慰问信
2015/03/24 职场文书
读完《骆驼祥子》的观后感!
2019/07/05 职场文书
《文化苦旅》读后感:阅读,让人诗意地栖居在大地上
2019/12/24 职场文书
mysql实现将字符串字段转为数字排序或比大小
2022/06/14 MySQL
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android