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
mysql From_unixtime及UNIX_TIMESTAMP及DATE_FORMAT日期函数
Mar 21 PHP
ThinkPHP的RBAC(基于角色权限控制)深入解析
Jun 17 PHP
php对数组排序代码分享
Feb 24 PHP
PHP基于php_imagick_st-Q8.dll实现JPG合成GIF图片的方法
Jul 11 PHP
php文件缓存类用法实例分析
Apr 22 PHP
php统计数组元素个数的方法
Jul 02 PHP
Zend Framework缓存Cache用法简单实例
Mar 19 PHP
PHP单链表的实现代码
Jul 05 PHP
safari下载文件自动加了html后缀问题
Nov 09 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
Oct 09 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 Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
PHP设计模式之简单投诉页面实例
2016/02/24 PHP
php实现与python进行socket通信的方法示例
2017/08/30 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
img的onload的另类用法
2008/01/10 Javascript
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
js利用数组length属性清空和截短数组的小例子
2014/01/15 Javascript
JavaScript利用正则表达式去除日期中的“-”
2014/07/01 Javascript
javascript获取当前的时间戳的方法汇总
2015/07/26 Javascript
轻松搞定js表单验证
2016/10/13 Javascript
js入门之Function函数的使用方法【新手必看】
2016/11/22 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
BootStrap的双日历时间控件使用
2017/07/25 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
细说webpack源码之compile流程-rules参数处理技巧(1)
2017/12/26 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
React 源码中的依赖注入方法
2018/11/07 Javascript
微信小程序tabBar设置实例解析
2019/11/14 Javascript
jQuery实现动态操作table行
2020/11/23 jQuery
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
对python周期性定时器的示例详解
2019/02/19 Python
Python神奇的内置函数locals的实例讲解
2019/02/22 Python
扩展Django admin的list_filter()可使用范围方法
2019/08/21 Python
python制作英语翻译小工具代码实例
2019/09/09 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
介绍一下OSI七层模型
2012/07/03 面试题
药品质量检测应届生求职信
2013/11/14 职场文书
不打扫卫生检讨书
2014/02/12 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
医学检验专业自荐信
2014/09/18 职场文书
2015年员工工作总结范文
2015/04/08 职场文书
获奖感言一句话
2015/07/31 职场文书
pandas中关于apply+lambda的应用
2022/02/28 Python