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应用提速面面观
Oct 09 PHP
浅析PHP水印技术
Feb 14 PHP
PHP对象Object的概念 介绍
Jun 14 PHP
PHP按行读取、处理较大CSV文件的代码实例
Apr 09 PHP
ThinkPHP中处理表单中的注意事项
Nov 22 PHP
PHP中使用file_get_contents post数据代码例子
Feb 13 PHP
你应该知道PHP浮点数知识
May 13 PHP
织梦sitemap地图实时推送给百度的教程
Aug 03 PHP
详解PHP对数组的定义以及数组的创建方法
Nov 27 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
Apr 15 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
微信支付扫码支付php版
Jul 22 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
再说下636单管机
2021/03/02 无线电
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
微信公众平台实现获取用户OpenID的方法
2015/04/15 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
代码精简的可以实现元素圆角的js函数
2007/07/21 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
Javascript selection的兼容性写法介绍
2013/12/20 Javascript
JQuery做的一个简单的点灯游戏分享
2014/07/16 Javascript
js不能获取隐藏的div的宽度只能先显示后获取
2014/09/04 Javascript
jquery 操作css样式、位置、尺寸方法汇总
2014/11/28 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
JS获取当前使用的浏览器名字以及版本号实现方法
2016/08/19 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
2016/09/20 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
详解如何webpack使用DllPlugin
2018/09/30 Javascript
Vuepress 搭建带评论功能的静态博客的实现
2019/02/17 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
[08:53]DOTA2每周TOP10 精彩击杀集锦vol.9
2014/06/26 DOTA
[46:53]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
pandas的连接函数concat()函数的具体使用方法
2019/07/09 Python
使用Python制作一个打字训练小工具
2019/10/01 Python
使用python-cv2实现Harr+Adaboost人脸识别的示例
2020/10/27 Python
amazeui页面分析之登录页面的示例代码
2020/08/25 HTML / CSS
Html5移动端网页端适配(js+rem)
2021/02/03 HTML / CSS
Betsey Johnson官网:妖娆可爱的连衣裙及鞋子、手袋和配件
2016/12/30 全球购物
木工主管岗位职责
2013/12/08 职场文书
汉语言文学毕业生自荐信范文
2014/03/24 职场文书
二手房购房意向书范本
2014/04/01 职场文书
社区精神文明建设汇报材料
2014/08/17 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
安徽导游词
2015/02/12 职场文书
2016年优秀党员教师先进事迹材料
2016/02/29 职场文书
人力资源部工作计划
2019/05/14 职场文书
MySQL 数据类型选择原则
2021/05/27 MySQL