当前位置: 首页 > news >正文

利用Yii框架中的collections体验PHP类型化编程

注: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);

相关文章:

  • 盘点那些不知名却常用的 Git 操作
  • Linux学习笔记1
  • C# 客户端服务器开发 异步实现
  • 打印mac地址
  • (转)EXC_BREAKPOINT僵尸错误
  • phantomjs技巧之将html页面转换为pdf文件
  • 完毕port(CompletionPort)具体解释 - 手把手教你玩转网络编程系列之三
  • 入门到进阶:最全面Vim快捷键键位图
  • github帐号及文章选题
  • 【Datastage】NULL VALUE TO A NOT NULL VALUE
  • MongoDB-3.4安装文档
  • C#开发微信门户及应用(28)--微信“摇一摇·周边”功能的使用和接口的实现
  • bug给你带来的四个好处
  • C++中怎样获取类成员的指针
  • lol盒子重点内容
  • Apache Spark Streaming 使用实例
  • Docker容器管理
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • ES6简单总结(搭配简单的讲解和小案例)
  • extjs4学习之配置
  • JavaScript类型识别
  • JS题目及答案整理
  • Laravel Mix运行时关于es2015报错解决方案
  • Material Design
  • MySQL Access denied for user 'root'@'localhost' 解决方法
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • Swoft 源码剖析 - 代码自动更新机制
  • VUE es6技巧写法(持续更新中~~~)
  • 将回调地狱按在地上摩擦的Promise
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 数据科学 第 3 章 11 字符串处理
  • 温故知新之javascript面向对象
  • 我感觉这是史上最牛的防sql注入方法类
  • 正则学习笔记
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (C++17) optional的使用
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (四) Graphivz 颜色选择
  • (详细版)Vary: Scaling up the Vision Vocabulary for Large Vision-Language Models
  • (新)网络工程师考点串讲与真题详解
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)负载均衡,回话保持,cookie
  • (转载)OpenStack Hacker养成指南
  • .bat批处理出现中文乱码的情况
  • .cn根服务器被攻击之后
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .Net Web项目创建比较不错的参考文章
  • .NET 表达式计算:Expression Evaluator
  • .NET 反射的使用