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 相关文章推荐
PHP4之真OO
Oct 09 PHP
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
Nov 18 PHP
PHP基础学习之流程控制的实现分析
Apr 28 PHP
解析PHP多种序列化与反序列化的方法
Jun 06 PHP
php打开文件fopen函数的使用说明
Jul 05 PHP
使用php实现截取指定长度
Aug 06 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
PHP+jQuery 注册模块开发详解
Oct 14 PHP
php使用cookie实现记住登录状态
Apr 27 PHP
php轻量级的性能分析工具xhprof的安装使用
Aug 12 PHP
Yii2实现多域名跨域同步登录退出
Feb 04 PHP
PHP fclose函数用法总结
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
Zend Studio 无法启动的问题解决方法
2008/12/04 PHP
PHP的explode和implode的使用说明
2011/07/17 PHP
php实现专业获取网站SEO信息类实例
2015/04/02 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
浅谈Coreseek、Sphinx-for-chinaese、Sphinx+Scws的区别
2016/12/15 PHP
使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
2017/09/15 PHP
phpinfo无法显示的原因及解决办法
2019/02/15 PHP
js 动态文字滚动的例子
2011/01/17 Javascript
原生js模拟淘宝购物车项目实战
2015/11/18 Javascript
js如何判断是否在iframe中及防止网页被别站用iframe嵌套
2017/01/11 Javascript
bootstrap multiselect下拉列表功能
2017/08/22 Javascript
使用JavaScript实现在页面中显示距离2017年中秋节的天数
2017/09/26 Javascript
Bootstrap table使用方法汇总
2017/11/17 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
vue中轮训器的使用
2019/01/27 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
vue中get请求如何传递数组参数的方法示例
2019/11/08 Javascript
[01:51]2014DOTA2国际邀请赛 这个赛场没有失败者VGTi5再见
2014/07/23 DOTA
Python入门及进阶笔记 Python 内置函数小结
2014/08/09 Python
在Django的通用视图中处理Context的方法
2015/07/21 Python
Python制作词云的方法
2018/01/03 Python
python3.x上post发送json数据
2018/03/04 Python
Python getsizeof()和getsize()区分详解
2020/11/20 Python
Python爬虫之Selenium多窗口切换的实现
2020/12/04 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
Javascript 高级手势使用介绍
2013/04/21 HTML / CSS
C++面试题:关于链表和指针
2013/06/05 面试题
升旗仪式演讲稿
2014/05/08 职场文书
工地质量标语
2014/06/12 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
三人合伙协议书范本
2014/10/29 职场文书
关于感谢信的范文
2015/01/23 职场文书
满月酒邀请函
2015/01/30 职场文书
2016年中秋节慰问信
2015/12/01 职场文书
导游词之山东八大关
2019/12/18 职场文书
Java 死锁解决方案
2022/05/11 Java/Android