这里有新鲜出炉的PHP设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于web开发领域。PHP的文件后缀名为php。
这篇文章主要介绍了php7匿名类用法,结合实例形式分析了php7匿名类的功能、特性、定义及相关使用技巧,需要的朋友可以参考下
本文实例讲述了PHP7匿名类用法。分享给大家供大家参考,具体如下:
匿名类跟匿名函数一样,创建一次性的简单对象
- <?php
- /**
- * Created by PhpStorm.
- * User: bee
- * Date: 2016/4/24
- * Time: 00:17
- */
- echo '匿名函数';
- $anonymous_func = function(){return 'function';};
- echo $anonymous_func();
- echo '<br>';
- echo '<hr>';
- class common {
- public $default = 10;
- function __construct($key){
- $this->getVal($key);
- }
- public function getVal(int $i):int{
- $this->default += $i;
- return $this->default+0.1;
- }
- }
- echo '有名函数';echo '<br>';
- $com = new common(1);
- echo $com->getVal(2.2).'--';
- echo $com->getVal(2.2).'--';
- echo (new common(1))->getVal(8.9);
- echo '<hr>';echo '匿名类';
- //定义匿名类需继承
- echo (new class(1) extends common{})->getVal(90);echo '<br>';
- echo (new class(2) extends common{})->getVal(90);
运行效果图如下:
匿名类被嵌套进普通 Class 后,不能访问这个外部类(Outer class)的 private(私有)、protected(受保护)方法或者属性。 为了访问外部类(Outer class)protected 属性或方法,匿名类可以 extend(扩展)此外部类。 为了使用外部类(Outer class)的 private属性,必须通过构造器传进来:
- <?php
- class Outer
- {
- private $prop = 1;
- protected $prop2 = 2;
- protected function func1()
- {
- return 3;
- }
- public function func2()
- {
- return new class($this->prop) extends Outer {
- private $prop3;
- public function __construct($prop)
- {
- $this->prop3 = $prop;
- }
- public function func3()
- {
- return $this->prop2 + $this->prop3 + $this->func1();
- }
- };
- }
- }
- echo (new Outer)->func2()->func3();//6
匿名函数可以实现闭包,那么相应的匿名类也可以实现闭包
- <?php
- /**
- * Created by PhpStorm.
- * User: bee
- * Date: 2016/4/24
- * Time: 1:51
- */
- $arr = array();
- for ($i=0; $i<3; $i++){
- $arr[] = new class($i){
- public $index=0;
- function __construct($i)
- {
- $this->index = $i;
- echo 'create</br>';
- }
- public function getVal(){
- echo $this->index;
- }
- };
- }
- $arr[2]->getVal();
- echo '<br>';
- var_dump($arr[1]);
运行效果图如下:
希望本文所述对大家PHP程序设计有所帮助。
来源: http://www.phperz.com/article/17/0829/342458.html