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代码(抓取网页中的邮箱地址)
Jul 17 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
PHP中使用sleep函数实现定时任务实例分享
Aug 21 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 PHP
ThinkPHP 模板substr的截取字符串函数详解
Jan 09 PHP
超强多功能php绿色集成环境详解
Jan 25 PHP
PHP数据库操作二:memcache用法分析
Aug 16 PHP
用Laravel Sms实现laravel短信验证码的发送的实现
Nov 29 PHP
Yii2.0实现的批量更新及批量插入功能示例
Jan 29 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 PHP
laravel框架使用阿里云短信发送消息操作示例
Feb 15 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分页显示制作详细讲解
2006/12/05 PHP
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
php向js函数传参的几种方法
2014/08/10 PHP
PHP处理大量表单字段的便捷方法
2015/02/07 PHP
PHP伪造来源HTTP_REFERER的方法实例详解
2015/07/06 PHP
Zend Framework教程之Application用法实例详解
2016/03/14 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
CSS+Table图文混排中实现文本自适应图片宽度(超简单+跨所有浏览器)
2009/02/14 Javascript
jQuery 全选效果实现代码
2009/03/23 Javascript
通过JavaScript使Div居中并随网页大小改变而改变
2013/06/24 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
php+ajax+jquery实现点击加载更多内容
2015/05/03 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
2016/06/21 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
细数JavaScript 一个等号,两个等号,三个等号的区别
2016/10/09 Javascript
基于匀速运动的实例讲解(侧边栏,淡入淡出)
2017/10/17 Javascript
初学者AngularJS的环境搭建过程
2017/10/27 Javascript
React组件重构之嵌套+继承及高阶组件详解
2018/07/19 Javascript
js如何获取图片url的Blob值并预览示例代码
2019/03/07 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
Django学习笔记之Class-Based-View
2017/02/15 Python
Python语言生成水仙花数代码示例
2017/12/18 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
少儿节目主持串词
2014/04/02 职场文书
关于十八大的演讲稿
2014/09/15 职场文书
县委班子四风对照检查材料思想汇报
2014/09/29 职场文书
邀请函模板
2015/02/02 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
小学三年级数学教学反思
2016/02/16 职场文书
刚学完怎么用Python实现定时任务,转头就跑去撩妹!
2021/06/05 Python
MySQL学习必备条件查询数据
2022/03/25 MySQL
教你如何用cmd快速登录服务器
2022/06/10 Servers
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript