注:20150514

看过

惠新宸 关于PHP7的PPT后,看到了这一特性将被支持。

Scalar Type Declarations

function foo(int num)

function bar (string name)

function foobar() : float {}

function add(int l, int r) : int {}

class A {
public function start (bool start) {}
}

Return Type Declarations

function foo(): array {
return [];
} interface A {
static function make(): A;
} function foo(): DateTime {
return null;
} //PHP Fatal error: Return value of foo() must be an instance of DateTime, null returned

最近有些迷恋类型化编程,甚至因为OSX上无法编译安装hhvm准备再拿一台机器装Linux来跑。

在折腾期间,想起PHP本身对形参的类型化支持 - array与object,其实可以通过定义一些基础类来解决PHP不能支持基础类型形参的问题。以前也整理过一篇文章谈过这个问题:http://www.cnblogs.com/x3d/p/4285787.html

Yii中其实针对集合数据,做了一些实现与封装,如CList、CMap、CTypedList、CTypedMap,基本实现类型化数组数据的指定,但还缺乏对基础类型的封装,如int、string等。

接前面一篇博文,调用实例为:

$name = 'jimmy';
//findUserByName($name); // PHP Catchable fatal error: Argument 1 passed to findUserByName() must be an instance of CString, string given $name = new CString($name);
findUserByName($name); $id = 10000;
//findUserById($id); // Catchable fatal error: Argument 1 passed to findUserById() must be an instance of CInteger, integer given $id = new CInteger($id);
findUserById($id);

而对于集合类数据,则借助于集合类。

function findUsersByNames(CTypedList $names) {
//code
} $names = new CTypedList('CString');
$names[] = new CString('jimmy');
$names[] = new CString('tommy');
findUsersByNames($names);

利用Yii框架中的collections体验PHP类型化编程的更多相关文章

  1. 三级联动(在YII框架中)

    //三级联动 //数据库代码过多就不上传了 //视图 <div class="area">    <table class="table"&g ...

  2. Yii 框架中安装 memcache 及配置和测试

    安装php_memcache.dll扩展 1.首先将php_memcache.dll文件放入E:\server\php\ext目录下 (php_memcache.dll下载地址:http://wind ...

  3. Yii框架中集成phprpc、hprose

    在项目开发的过程中有时候会涉及到对外提供接口供第三方程序调用或者是不同程序间需要相互通信,那么最通用的做法是用传统的SOAP方式来实现,用XML的文档格式来作为传输载体.但是这种方式不灵活,支持的数据 ...

  4. 使用Yii框架中遇到的三个问题

    以下由我们在信易网络公司开发项目的时候终结出的一些经验 使用Yii框架中遇到的三个问题 1.main.php文件中欲引入全局变量的问题 还原一下此问题:在Yii框架中,main.php一般会作为整个应 ...

  5. yii框架中关于控制器中filter过滤器和外部action的使用

    在yii框架中,控制器的过滤器分为执行前和执行后,这里举例是在执行控制器前的过滤. 需要在components/文件夹下定义公共的TestAction.php文件,并且实现run()方法.这个acti ...

  6. Yii框架中使用SRBAC作为权限管理模块时遇到的问题

    Yii框架中使用SRBAC作为权限管理模块时遇到的问题   看到Yii中提供RBAC的插件,SRBAC,就想用用. 结果按照手册上的安装办法,整来整去,安装完了,可就是进不了权限管理界面. 最后想到, ...

  7. YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因

    YII框架中可以使用foreach遍历对象以及可以使用数组形式直接访问对象的原因在YII框架的使用过程中,我们可以使用foreach直接遍历findAll等方法返回的对象的属性为什么呢?其实这与CMo ...

  8. Yii框架中使用PHPExcel导出Excel文件

    最近在研究PHP的Yii框架,很喜欢,碰到导出Excel的问题,研究了一下,就有了下面的方法: 1.首先在config\main.php中添加对PHPExcel的引用,我的方式是这样: 1 2 3 4 ...

  9. YII框架中php入口文件隐藏

    Apache配置修改 主要修改下httpd文件中的两个地方 1.启用mod_rewrite.so模块,在Apache的配置文件中找到如下行,去掉前面的字符"#",保存 #LoadM ...

随机推荐

  1. WebApi系列~StringContent参数需要添加MetaType对象

    回到目录 对于api调用已经很多见了,在客户端去post一个请求到API服务端也是经常见到,但有时不注意,可能会引起一些问题,如为一个HttpContent参数进行赋值时,如果使用StringCont ...

  2. MVVM架构~knockoutjs系列之验证成功提示显示

    返回目录 对于knockout.validation来说,我们已经知道了如何去验证大部分表单元素,而有时,我们的需求希望在每个元素验证成功后,去显示正确的提示,这个我们很容易的使用self.元素.is ...

  3. Atitit.会员卡(包括银行卡)api的设计

    Atitit.会员卡(包括银行卡)api的设计 1. 银行卡的本质是一种商业机构会员卡1 2. 会员卡号结构组成1 2.1. ●前六位是:发行者标识代码 Issuer Identification N ...

  4. SVN命令模式批量更新多个项目

    使用svn作为版本管理是,在一个仓库下边同时建立多个项目,每天上班都需要一个个更新,为了发挥程序员懒的精神,能让电脑做的,绝不手工操作.作为自动化处理,在windows环境,首先想到了bat Tort ...

  5. chrome开发总结(交互/权限/存储)-爬虫

    chrome开发总结(交互/权限/存储)-爬虫 [TOC] 标签(空格分隔): 杂乱之地 经过一翻折腾.还是选择了chrome来做爬虫.主要是为了解决一些ajax加载的问题以及代理的问题. 1.chr ...

  6. Python字符串的encode与decode

    首先要搞清楚,字符串在Python内部的表示是unicode编码. 因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unic ...

  7. jxl写入excel实现数据导出功能

    @RequestMapping(params = "method=export", method = RequestMethod.GET) public void exportCo ...

  8. 转载--How to Install VMware Tools on CentOS 6.3

    源地址:http://www.ehowstuff.com/how-to-install-vmware-tools-on-centos-6-3/ VMware Tools is a group of u ...

  9. nodejs 生产环境配置

    1.node 默认为development(开发)模式 启动node 时可以设置模式为生产模式 set NODE_ENV=production node app.js 2.设置node监听的端口 va ...

  10. 反应堆模式最牛的那篇论文--由solidmango执笔翻译

    The Reactor:An Object-Oriented Wrapper for Event-Driven Port Monitoring and Service Demultiplexing 反 ...