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 相关文章推荐
smarty section简介与用法分析
Oct 03 PHP
php实现的遍历文件夹下所有文件,编辑删除
Jan 05 PHP
深入PHP curl参数的详解
Jun 17 PHP
PHP中比较时间大小实例
Aug 21 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
Dec 31 PHP
PHP扩展迁移为PHP7扩展兼容性问题记录
Feb 15 PHP
Yii2使用自带的UploadedFile实现的文件上传
Jun 20 PHP
PHP中OpenSSL加密问题整理
Dec 14 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 PHP
详解PHP神奇又有用的Trait
Mar 25 PHP
PHP扩展安装方法步骤解析
Nov 24 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 判断过去离现在几年的函数(实例代码)
2016/11/15 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
使用非html5实现js板连连看游戏示例代码
2013/09/22 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
javascript实现根据函数名称字符串动态执行函数的方法示例
2016/12/28 Javascript
JavaScript实现翻页功能(附效果图)
2017/02/16 Javascript
vue基于Vue2.0和高德地图的地图组件实例
2017/04/28 Javascript
原生JS实现网页手机音乐播放器 歌词同步播放的示例
2018/02/02 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
微信小程序自定义单项选择器样式
2019/07/25 Javascript
vue props对象validator自定义函数实例
2019/11/13 Javascript
ckeditor一键排版功能实现方法分析
2020/02/06 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
python抓取网页图片示例(python爬虫)
2014/04/27 Python
Python语言的面相对象编程方式初步学习
2016/03/12 Python
python+selenium实现163邮箱自动登陆的方法
2017/12/31 Python
Django项目实战之用户头像上传与访问的示例
2018/04/21 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
解决python中使用PYQT时中文乱码问题
2019/06/17 Python
使用Django搭建web服务器的例子(最最正确的方式)
2019/08/29 Python
python编写计算器功能
2019/10/25 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
python 读取.nii格式图像实例
2020/07/01 Python
俄罗斯女装店:12storeez
2019/10/25 全球购物
The Outnet亚太地区:折扣设计师时装店
2019/12/05 全球购物
环境工程与管理大学毕业生求职信
2013/10/02 职场文书
大学自我鉴定
2013/12/20 职场文书
毕业生自荐书模版
2014/01/04 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
查摆问题整改措施
2014/10/24 职场文书
2014年保育员工作总结
2014/12/02 职场文书
介绍信格式
2015/01/30 职场文书
委托收款证明
2015/06/23 职场文书
关于分班的感言
2015/08/04 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android