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 相关文章推荐
复杂检索数据并分页显示的处理方法
Oct 09 PHP
PHP实现多服务器session共享之NFS共享的方法
Mar 16 PHP
php $_ENV为空的原因分析
Jun 01 PHP
php中计算程序运行时间的类代码
Nov 03 PHP
解析php通过cookies获取远程网页的指定代码
Jun 25 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
PHP strip_tags()去除HTML、XML以及PHP的标签介绍
Feb 18 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 PHP
Thinkphp结合AJAX长轮询实现PC与APP推送详解
Jul 31 PHP
thinkphp5.0自定义验证规则使用方法
Nov 16 PHP
PHP JWT初识及其简单示例
Oct 10 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
为php4加入动态flash文件的生成的支持
2006/10/09 PHP
PHP入门
2006/10/09 PHP
php基础知识:控制结构
2006/12/13 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
JavaScript 中的replace方法说明
2007/04/13 Javascript
浅谈jQuery异步对象(XMLHttpRequest)
2014/11/17 Javascript
JavaScript学习笔记之Cookie对象
2015/01/22 Javascript
全面解析Bootstrap弹窗的实现方法
2015/12/01 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
jQuery动态修改字体大小的方法【测试可用】
2016/09/09 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
jQuery实现弹窗下底部页面禁止滑动效果
2017/12/19 jQuery
web前端vue filter 过滤器
2018/01/12 Javascript
使用vue-cli导入Element UI组件的方法
2018/05/16 Javascript
微信小程序登录换取token的教程
2018/05/31 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
Vue.js 中的实用工具方法【推荐】
2019/07/04 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
2020/08/14 Javascript
详解Typescript里的This的使用方法
2021/01/08 Javascript
[05:15]DOTA2英雄梦之声_第16期_灰烬之灵
2014/06/21 DOTA
python统计日志ip访问数的方法
2015/07/06 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
html2canvas生成的图片偏移不完整的解决方法
2020/05/19 HTML / CSS
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
2014全国两会大学生学习心得体会
2014/03/10 职场文书
天猫某品牌专卖店运营计划书
2014/03/21 职场文书
商场圣诞节活动总结
2015/05/06 职场文书
小区物业管理2015年度工作总结
2015/10/22 职场文书
修辞手法有哪些?
2019/08/29 职场文书
MySql数据库触发器使用教程
2022/06/01 MySQL