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程序员最常犯的11个MySQL错误小结
Nov 20 PHP
php中用date函数获取当前时间有误的解决办法
Aug 02 PHP
浅析php单例模式
Nov 25 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
Jul 28 PHP
深入探究PHP的多进程编程方法
Aug 18 PHP
在PHP中使用FastCGI解析漏洞及修复方案
Nov 10 PHP
简介WordPress中用于获取首页和站点链接的PHP函数
Dec 17 PHP
在Mac OS的PHP环境下安装配置MemCache的全过程解析
Feb 15 PHP
CentOS系统中PHP安装扩展的方式汇总
Apr 09 PHP
PHP实现获取第一个中文首字母并进行排序的方法
May 09 PHP
Laravel 自带的Auth验证登录方法
Sep 30 PHP
php ZipArchive实现多文件打包下载实例
Oct 31 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面向对象全攻略 (二) 实例化对象 使用对象成员
2009/09/30 PHP
PHP支持多种格式图片上传(支持jpg、png、gif)
2011/11/03 PHP
thinkphp 一个页面使用2次分页的实现方法
2013/07/15 PHP
PHP访问Google Search API的方法
2015/03/05 PHP
微信公众平台开发之天气预报功能
2015/08/31 PHP
使用CSS3实现字体颜色渐变的实现
2021/03/09 HTML / CSS
javascript[js]获取url参数的代码
2007/10/17 Javascript
JavaScript 解析读取XML文档 实例代码
2009/07/07 Javascript
jQuery判断元素是否存在的可靠方法
2014/05/06 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
js实现浏览本地文件并显示扩展名的方法
2015/08/17 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
JavaScript实现窗口抖动效果
2016/10/19 Javascript
详解ES6通过WeakMap解决内存泄漏问题
2018/03/09 Javascript
JS实现table表格内针对某列内容进行即时搜索筛选功能
2018/05/11 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
2018/08/28 Javascript
微信小程序实现评论功能
2018/11/28 Javascript
vue中的面包屑导航组件实例代码
2019/07/01 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
ionic+html5+API实现双击返回键退出应用
2019/09/17 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
python网络编程学习笔记(一)
2014/06/09 Python
探究Python的Tornado框架对子域名和泛域名的支持
2015/05/02 Python
python开发之list操作实例分析
2016/02/22 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
旷课检讨书范文
2014/10/30 职场文书
2014财产信托协议书范本
2014/11/18 职场文书
病危通知单
2015/04/17 职场文书
写给老师的保证书
2015/05/09 职场文书
Nginx配置根据url参数重定向
2022/04/11 Servers