关于PHP trait、生成器
来源:互联网 发布:电信宽带免费提速软件 编辑:程序博客网 时间:2024/05/31 18:34
关于PHP trait、生成器
Trait(PHP5.4.0之后才支持)
1、trait跟类相似,但是更轻便,想一下,如果A类和B类都需要一个获取地理位置的功能,我们通常的解决办法是写一个父类,里边定义一个获取地理位置的函数,然后A类和B类都继承它,缺点是让无关的类有了同一个父类,强制了AB的关联;还有一种解决办法是定义一个接口interface,A和B都实现这个接口,这样的缺点是,同样一个获取地理位置的功能要写两遍,不符合DRY(Dotn’t repeat yourself)原则;最后推荐使用trait,这更符合模块化的观念,实现如下
2、trait定义
123456
trait Geo {protected $myAddress;public function getAddress() {return $this->myAddress;}}
3、使用trait
12345678910111213141516
class A {use Geo;//A类的实现}class B {use Geo;//B类的实现}$a = new A();$b = new B();$a->getAddress(); //A类获取地理位置$b->getAddress(); //B类获取地理位置
4、小结:
其实trait就相当于一个可以放到类里的模块,有啥通用的部分可以提出来,放到trait里边,然后就不用在不同的类里重复实现了。
生成器(PHP5.5.0之后才支持)
1、生成器就是一个PHP函数,在一个函数中使用yield关键字,可以这样理解,yield是一个大数组,yield关键字在这个函数里每出现一次,就会在这个数组里加入一个元素,需要注意的是,生成器不需要返回值,只通过yield产出值,最终返回的是一个Generator对象(就是刚才那个大数组)。
2、优点是占用内存小,下边是一个生成范围内数值的例子
1234567891011121314151617181920212223242526272829303132
//常规做法function makeRange($length) {$data = [];for($i=0;$i<$length;$i++) {$data[] = $i;}return $data;}//这样$arr会创建一个99999个元素的数组,这样会占用很大内存$arr = makeRange(99999);foreach($arr as $value) {echo $value;}//使用生成器,这样只会在每次迭代的时候生成不同的元素,占用内存跟$length的长度没关系function makeRange($length) {for($i=0;$i<$length;$i++) {yield $i;}}//这里不推荐把makeRange()赋值给一个变量,这个变量是一个Generator对象,并不是我们理解的数组$arr = makeRange(999999);foreach($arr as $value) {echo $value;}//<span style="color: #ff0000;">推荐写法</span>foreach(makeRange(999999) as $value) {echo $value;}
想了解跟多的知识,请加入627336556 技术开发交流群,会有意想不到的收获~~~!!!
阅读全文
1 0
- 关于PHP trait、生成器
- php trait
- php trait
- PHP TRAIT
- PHP Trait
- PHP trait
- php trait
- PHP Trait
- php-Trait
- php trait
- php trait
- php trait 使用方法
- php手册之Trait
- php trait特性
- php的trait特性
- php中的trait
- php中的trait
- php中的trait
- Mastering Web Application Development with AngularJS-Packt 2013 读书笔记(不错的好书!)
- Node -- 构建HTTP服务
- HadoopHelper使用说明
- 混合开发-webview和原生交互
- 利用DBLink+JOB实现两个Oracle数据库之间的数据同步
- 关于PHP trait、生成器
- 图解HTTP
- 1639
- selenium 重要方法
- java 抽象类 http://www.nightsong.cc/index.php/post/198.html
- Go并发模型之生动我见(一)
- 【Git深入理解】实战经验总结
- java数据结构--链表
- Vue2.0全局API