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 04 PHP
PHP中error_reporting()函数的用法(修改PHP屏蔽错误)
Jul 01 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
PHP empty函数报错解决办法
Mar 06 PHP
smarty内置函数section的用法
Jan 22 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
ThinkPHP静态缓存简单配置和使用方法详解
Mar 23 PHP
PHP序列化操作方法分析
Sep 28 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 PHP
解决tp5在nginx下修改配置访问的问题
Oct 16 PHP
php远程请求CURL案例(爬虫、保存登录状态)
Apr 01 PHP
关于PHP数组迭代器的使用方法实例
Nov 17 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
写一个用户在线显示的程序
2006/10/09 PHP
建立动态的WML站点(一)
2006/10/09 PHP
某大型网络公司应聘时的笔试题目附答案
2008/03/27 PHP
说明的比较细的php 正则学习实例
2008/07/30 PHP
Yii中render和renderPartial的区别
2014/09/03 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
PHP测试框架PHPUnit组织测试操作示例
2018/05/28 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
JavaScript 学习笔记之变量及其作用域
2015/01/14 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
Bootstrap表单组件教程详解
2016/04/26 Javascript
jquery-mobile表单的创建方法详解
2016/11/23 Javascript
详解用node-images 打造简易图片服务器
2017/05/08 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
input输入框内容实时监测(附代码)
2017/08/15 Javascript
基于webpack 实用配置方法总结
2017/09/28 Javascript
JavaScript简单实现合并两个Json对象的方法示例
2017/10/16 Javascript
vue实现图片加载完成前的loading组件方法
2018/02/05 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
使用node搭建自动发图文微博机器人的方法
2019/03/22 Javascript
python中使用mysql数据库详细介绍
2015/03/27 Python
用python找出那些被“标记”的照片
2017/04/20 Python
浅谈python的dataframe与series的创建方法
2018/11/12 Python
利用python实现对web服务器的目录探测的方法
2019/02/26 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
Python3.8对可迭代解包的改进及用法详解
2019/10/15 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
大专毕业生自我评价分享
2013/11/10 职场文书
大学生自我评价范文分享
2014/02/21 职场文书
《菜园里》教学反思
2014/04/17 职场文书
留学推荐信范文
2014/05/10 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
2015年党建工作总结
2015/03/30 职场文书