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入门基础之php代码写法
Dec 30 PHP
PHP求小于1000的所有水仙花数的代码
Jan 10 PHP
PHP rawurlencode与urlencode函数的深入分析
Jun 08 PHP
PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
Jun 12 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
php实现转换ubb代码的方法
Jun 18 PHP
3种php生成唯一id的方法
Nov 23 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
Jan 07 PHP
在WordPress中获取数据库字段内容和添加主题设置菜单
Jan 11 PHP
PHP获取文件扩展名的方法实例总结
Jun 10 PHP
PHP获取数组中指定的一列实例
Dec 27 PHP
PHP安装memcache扩展的步骤讲解
Feb 14 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设置进度条的方法
2015/07/08 PHP
PHP实现页面静态化的超简单方法
2016/09/06 PHP
CSS JavaScript 实现菜单功能 改进版
2008/12/09 Javascript
15款优秀的jQuery导航菜单插件分享
2011/07/19 Javascript
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
判断字符串的长度(优化版)中文占两个字符
2014/10/30 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
jQuery实现弹出窗口中切换登录与注册表单
2015/06/05 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
bootstrap-wysiwyg结合ajax实现图片上传实时刷新功能
2016/05/27 Javascript
浅谈jQuery中hide和fadeOut的区别 show和fadeIn的区别
2016/08/18 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
vue登录路由验证的实现
2017/12/13 Javascript
微信小程序 如何引入外部字体库iconfont的图标
2018/01/31 Javascript
JavaScript Tab菜单实现过程解析
2020/05/13 Javascript
vue-iview动态新增和删除的方法
2020/06/17 Javascript
JavaScript经典案例之简易计算器
2020/08/24 Javascript
python 布尔操作实现代码
2013/03/23 Python
Python中endswith()函数的基本使用
2015/04/07 Python
Django查找网站项目根目录和对正则表达式的支持
2015/07/15 Python
深入浅出分析Python装饰器用法
2017/07/28 Python
Python打印“菱形”星号代码方法
2018/02/05 Python
python如何统计序列中元素
2020/07/31 Python
Python利用splinter实现浏览器自动化操作方法
2018/05/11 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
python 基于opencv 实现一个鼠标绘图小程序
2020/12/11 Python
沙特阿拉伯电子产品和家用电器购物网站:Black Box
2019/07/24 全球购物
Michael Kors英国官网:美国奢侈品品牌
2019/11/13 全球购物
ANINE BING官方网站:奢华的衣橱基本款和时尚永恒的单品
2019/11/26 全球购物
假日旅行社实习自我鉴定
2013/09/24 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
2015元旦标语横幅
2014/12/09 职场文书
党内外群众意见范文
2015/06/02 职场文书
胡桃夹子观后感
2015/06/11 职场文书
Python  lambda匿名函数和三元运算符
2022/04/19 Python