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 相关文章推荐
ob_start(),ob_start('ob_gzhandler')使用
Dec 25 PHP
让PHP更快的提供文件下载的代码
Jun 13 PHP
php使用curl模拟登录后采集页面的例子
Nov 04 PHP
PHP5各个版本的新功能和新特性总结
Mar 16 PHP
php字符串替换函数substr_replace()用法实例
Mar 17 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
Yii 2.0实现联表查询加搜索分页的方法示例
Aug 02 PHP
thinkPHP通用控制器实现方法示例
Nov 23 PHP
PHP按一定比例压缩图片的方法
Oct 12 PHP
PHP获取访问设备信息的方法示例
Feb 20 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 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
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
php生成圆角图片的方法
2015/04/07 PHP
php生成数字字母的验证码图片
2015/07/14 PHP
简单实现php上传文件功能
2017/09/21 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
window.showModalDialog使用手册
2007/01/11 Javascript
jQuery 开天辟地入门篇一
2009/12/09 Javascript
$(document).ready(function() {})不执行初始化脚本
2014/06/19 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
JS组件系列之Bootstrap Icon图标选择组件
2016/01/28 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
Vue.js中的computed工作原理
2018/03/22 Javascript
Node.js命令行/批处理中如何更改Linux用户密码浅析
2018/07/22 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
vue使用@scroll监听滚动事件时,@scroll无效问题的解决方法详解
2019/10/15 Javascript
Vue基础配置讲解
2019/11/29 Javascript
vue点击标签切换选中及互相排斥操作
2020/07/17 Javascript
Python快速从注释生成文档的方法
2016/12/26 Python
Python 实现淘宝秒杀的示例代码
2018/01/02 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
余弦相似性计算及python代码实现过程解析
2019/09/18 Python
python实现数据清洗(缺失值与异常值处理)
2019/12/02 Python
python GUI库图形界面开发之PyQt5信号与槽基础使用方法与实例
2020/03/06 Python
python如何进入交互模式
2020/07/06 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
美国美发品牌:Bumble and Bumble
2016/10/08 全球购物
个人简历中自我评价
2014/02/11 职场文书
婚假请假条格式及范文
2014/04/10 职场文书
学习礼仪心得体会
2014/09/01 职场文书
学生党员检讨书范文
2014/12/27 职场文书
Vue如何实现组件间通信
2021/05/15 Vue.js
go开发alertmanger实现钉钉报警
2021/07/16 Golang