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生成静态页
Nov 25 PHP
PHP autoload与spl_autoload自动加载机制的深入理解
Jun 05 PHP
将word转化为swf 如同百度文库般阅读实现思路及代码
Aug 09 PHP
教你如何快捷的使用cmd访问mysql小技巧
May 26 PHP
ThinkPHP中redirect用法分析
Dec 05 PHP
php实现数组按指定KEY排序的方法
Mar 30 PHP
各种快递查询--Api接口
Apr 26 PHP
php array_map使用自定义的函数处理数组中的每个值
Oct 26 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
Dec 10 PHP
PHP实现获取ip地址的5种方法,以及插入用户登录日志操作示例
Feb 28 PHP
laravel5 Eloquent 实现事务方式
Oct 21 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
Docker 如何布置PHP开发环境
2016/06/21 PHP
php 数组字符串搜索array_search技巧
2016/07/05 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
仿校内登陆框,精美,给那些很厉害但是没有设计天才的程序员
2008/11/24 Javascript
javascript 对象定义方法 简单易学
2009/03/22 Javascript
js nextSibling属性和previousSibling属性概述及使用注意
2013/02/16 Javascript
JS、DOM和JQuery之间的关系示例分析
2014/04/09 Javascript
js解决select下拉选不中问题
2014/10/14 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
node.js中的url.parse方法使用说明
2014/12/10 Javascript
javascript中hasOwnProperty() 方法使用指南
2015/03/09 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
jQuery超简单选项卡完整实例
2015/09/26 Javascript
JavaScript实现打开链接页面的方式汇总
2016/06/02 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
js使用原型对象(prototype)需要注意的地方
2017/08/28 Javascript
浅谈VUE监听窗口变化事件的问题
2018/02/24 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
vue非父子组件通信问题及解决方法
2018/06/11 Javascript
分享5个小技巧让你写出更好的 JavaScript 条件语句
2018/10/20 Javascript
layui之数据表格--与后台交互获取数据的方法
2019/09/29 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
Python日志无延迟实时写入的示例
2019/07/11 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
Python logging自定义字段输出及打印颜色
2020/11/30 Python
德购商城:德国进口直邮商城
2017/06/13 全球购物
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
英国天然抗衰老护肤品品牌:Nakin Skin Care
2019/04/16 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
如果Session Bean得Remove方法一直都不被调用会怎么样
2012/07/14 面试题
问卷调查计划书
2014/01/10 职场文书
考研复习计划
2015/01/19 职场文书
pytorch常用数据类型所占字节数对照表一览
2021/05/17 Python
Go语言的协程上下文的几个方法和用法
2022/04/11 Golang