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判断电脑访问、手机访问的例子
May 10 PHP
linux下安装php的memcached客户端
Aug 03 PHP
php的crc32函数使用时需要注意的问题(不然就是坑)
Apr 21 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
Jun 17 PHP
PHP保存session到memcache服务器的方法
Jan 19 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
PHP读取目录树的实现方法分析
Mar 22 PHP
PHP通过文件保存和更新信息的方法分析
Sep 12 PHP
php定期拉取数据对比方法实例
Sep 22 PHP
使用laravel的migrate创建数据表的方法
Sep 30 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设计模式 php实现单例模式(singleton)
2015/12/07 PHP
Laravel框架实现发送短信验证功能代码
2016/06/06 PHP
php 二维数组快速排序算法的实现代码
2017/10/17 PHP
使用IE6看老赵的博客 jQuery初探
2010/01/17 Javascript
AJAX 网页保留浏览器前进后退等功能
2011/02/12 Javascript
PHP abstract与interface之间的区别
2013/11/11 Javascript
ECMAScript5中的对象存取器属性:getter和setter介绍
2014/12/08 Javascript
node.js中的fs.open方法使用说明
2014/12/17 Javascript
JavaSacript中charCodeAt()方法的使用详解
2015/06/05 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
微信小程序实现tab切换效果
2017/11/21 Javascript
VUE中v-on:click事件中获取当前dom元素的代码
2018/08/22 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
python在windows下实现ping操作并接收返回信息的方法
2015/03/20 Python
Python的Flask开发框架简单上手笔记
2015/11/16 Python
基于python 字符编码的理解
2017/09/02 Python
python删除文本中行数标签的方法
2018/05/31 Python
python中property和setter装饰器用法
2019/12/19 Python
详解Python IO口多路复用
2020/06/17 Python
python对execl 处理操作代码
2020/06/22 Python
python3 os进行嵌套操作的实例讲解
2020/11/19 Python
利用python+ffmpeg合并B站视频及格式转换的实例代码
2020/11/24 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
Hudson Jeans官网:高级精制牛仔裤
2018/11/28 全球购物
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
俄罗斯护发和专业化妆品购物网站:Hihair
2019/09/28 全球购物
垃圾回收的优点和原理。并考虑2种回收机制
2016/10/16 面试题
Unix/Linux开发面试题
2016/08/16 面试题
岗位竞聘演讲稿
2014/01/10 职场文书
《莫高窟》教学反思
2014/02/25 职场文书
学雷锋树新风演讲稿
2014/05/10 职场文书
2014年变电站工作总结
2014/12/19 职场文书
市场营销计划书
2015/01/17 职场文书
2016年寒假生活小结
2015/10/10 职场文书
《弟子规》读后感:知廉耻、明是非、懂荣辱、辨善恶
2019/12/03 职场文书
笔记本自带的win11如何跳过联网激活?
2022/04/20 数码科技