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下MAIL的另一解决方案
Oct 09 PHP
php数组(array)输出的三种形式详解
Jun 05 PHP
php可应用于面包屑导航的迭代寻找家谱树实现方法
Feb 02 PHP
PHP贪婪算法解决0-1背包问题实例分析
Mar 23 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
深入理解PHP中的Streams工具
Jul 03 PHP
PHP微信开发之查询城市天气
Jun 23 PHP
PHP mysqli_free_result()与mysqli_fetch_array()函数详解
Sep 21 PHP
PHP简单实现遍历目录下特定文件的方法小结
May 22 PHP
yii 2.0中表单小部件的使用方法示例
May 23 PHP
php实现微信支付之现金红包
May 30 PHP
PHP使用 Imagick 扩展实现图片合成,圆角处理功能示例
Sep 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
2020年4月放送!《Princess Connect Re:Dive》制作组 & 角色声优公开!
2020/03/06 日漫
在PHP中使用Sockets 从Usenet中获取文件
2008/01/10 PHP
PHP魔术方法__GET、__SET使用实例
2014/11/25 PHP
PHP调用Linux命令权限不足问题解决方法
2015/02/07 PHP
PHP会话操作之cookie用法分析
2016/09/28 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
JavaScript版TAB选项卡效果实例
2013/08/16 Javascript
javascript中的原型链深入理解
2014/02/24 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
jQuery中ready事件用法实例
2015/01/19 Javascript
JavaScript获取网页中第一个图片id的方法
2015/04/03 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
DropDownList实现可输入可选择(两种版本可选)
2016/12/07 Javascript
解决同一页面中两个iframe互相调用jquery,js函数的方法
2016/12/12 Javascript
利用Javascript实现简单的转盘抽奖
2017/02/13 Javascript
vue组件表单数据回显验证及提交的实例代码
2018/08/30 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
javaScript代码飘红报错看不懂?读完这篇文章再试试
2020/08/19 Javascript
[01:28:24]NAVI vs VG Supermajor 败者组 BO3 第三场 6.5
2018/06/06 DOTA
浅谈Python中copy()方法的使用
2015/05/21 Python
python opencv检测目标颜色的实例讲解
2018/04/02 Python
python截取两个单词之间的内容方法
2018/12/25 Python
Python 将json序列化后的字符串转换成字典(推荐)
2020/01/06 Python
Python自动化之UnitTest框架实战记录
2020/09/08 Python
DJI大疆德国官方商城:大疆无人机
2018/09/01 全球购物
食品营养与检测应届生求职信
2013/11/08 职场文书
实习生自我鉴定范文
2013/12/05 职场文书
销售主管岗位职责范本
2014/02/14 职场文书
2014厂务公开实施方案
2014/02/17 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
公务员保密工作承诺书
2015/05/04 职场文书
2015年中职班主任工作总结
2015/05/25 职场文书
委托收款证明
2015/06/23 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
如何在python中实现ECDSA你知道吗
2021/11/23 Python
Python的property属性详细讲解
2022/04/11 Python