PHP7匿名类用法分析


Posted in PHP onSeptember 26, 2016

本文实例讲述了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);

运行效果图如下:

PHP7匿名类用法分析

匿名类被嵌套进普通 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]);

运行效果图如下:

PHP7匿名类用法分析

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP通过header实现文本文件下载的代码
Aug 08 PHP
PHP header函数分析详解
Aug 06 PHP
php 文本文件的读取效率
Feb 10 PHP
thinkPHP的Html模板标签使用方法
Nov 13 PHP
table标签的结构与合并单元格的实现方法
Jul 24 PHP
php增删改查示例自己写的demo
Sep 04 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
Yii实现MySQL多数据库和读写分离实例分析
Dec 03 PHP
PHP foreach遍历多维数组实现方式
Nov 16 PHP
phpMyAdmin无法登陆的解决方法
Apr 27 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
使用laravel和ECharts实现折线图效果的例子
Oct 09 PHP
PHP7常量数组用法分析
Sep 26 #PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
Sep 26 #PHP
PHP7.1新功能之Nullable Type用法分析
Sep 26 #PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 #PHP
php版交通银行网银支付接口开发入门教程
Sep 26 #PHP
php版微信公众平台实现预约提交后发送email的方法
Sep 26 #PHP
php版微信公众平台入门教程之开发者认证的方法
Sep 26 #PHP
You might like
PHP 小心urldecode引发的SQL注入漏洞
2011/10/27 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
帝国cms目录结构分享
2015/07/06 PHP
Laravel 将数据表的数据导出,并生成seeds种子文件的方法
2019/10/09 PHP
为你的 Laravel 验证器加上多验证场景的实现
2020/04/07 PHP
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
将string解析为json的几种方式小结
2010/11/11 Javascript
javascript强大的日期函数代码分享
2013/09/04 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
Javascript缓存API
2016/06/14 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
vue-cli+axios实现文件上传下载功能(下载接收后台返回文件流)
2019/05/10 Javascript
微信小程序canvas绘制圆角base64图片的实现
2019/08/18 Javascript
js实现简单进度条效果
2020/03/25 Javascript
基于javascript实现放大镜特效
2020/12/03 Javascript
Python实现的Kmeans++算法实例
2014/04/26 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
2017/07/25 Python
Python错误处理操作示例
2018/07/18 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
解决PyCharm的Python.exe已经停止工作的问题
2018/11/29 Python
详解python读取image
2019/04/03 Python
python函数定义和调用过程详解
2020/02/09 Python
详解python中的三种命令行模块(sys.argv,argparse,click)
2020/12/15 Python
python3列表删除大量重复元素remove()方法的问题详解
2021/01/04 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
Shopty西班牙:缝纫机在线销售
2018/01/26 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
物流专业自荐信
2014/05/23 职场文书
小学学习雷锋活动总结
2014/07/03 职场文书
领导干部个人整改措施落实情况汇报
2014/10/29 职场文书
2016年寒假学习心得体会
2015/10/09 职场文书
MySQL基础(二)
2021/04/05 MySQL