PHP容器类的两种实现方式示例


Posted in PHP onJuly 24, 2019

本文实例讲述了PHP容器类的两种实现方式。分享给大家供大家参考,具体如下:

通过魔术方法实现

class

class MagicContainer{
  private $ele;
  function __construct()
  {
    $this->ele = [];
  }
  function __set($name, $value)
  {
    $this->ele[$name] = $value;
  }
  function __get($name)
  {
    return $this->ele[$name];
  }
  function __isset($name)
  {
    return isset($this->ele[$name]);
  }
  function __unset($name)
  {
    if(isset($this->ele[$name])){
      unset($this->ele[$name]);
    }
  }
}

usage

$container = new MagicContainer();
$container->logger = function ($msg){
  file_put_contents('info.log',$msg.PHP_EOL,FILE_APPEND);
};
$logger = $container->logger;
$logger('magic container works');

通过ArrayAccess接口实现

class

class ArrayContainer implements ArrayAccess {
  private $elements;
  public function __construct()
  {
    $this->elements = [];
  }
  public function offsetExists($offset){
    return isset($this->elements[$offset]);
  }
  public function offsetGet($offset){
    if($this->offsetExists($offset)){
      return $this->elements[$offset];
    }else{
      return false;
    }
  }
  public function offsetSet($offset, $value){
    $this->elements[$offset] = $value;
  }
  public function offsetUnset($offset){
    if($this->offsetExists($offset)){
      unset($this->elements[$offset]);
    }
  }
}

usage

$container = new ArrayContainer();
$container['logger'] = function ($msg){
  file_put_contents('info.log',$msg.PHP_EOL,FILE_APPEND);
};
$logger = $container['logger'];
$logger('array container works');

Container

class

class Container implements ArrayAccess {
  private $elements;
  public function __construct()
  {
    $this->elements = [];
  }
  public function offsetExists($offset){
    return isset($this->elements[$offset]);
  }
  public function offsetGet($offset){
    if($this->offsetExists($offset)){
      return $this->elements[$offset];
    }else{
      return false;
    }
  }
  public function offsetSet($offset, $value){
    $this->elements[$offset] = $value;
  }
  public function offsetUnset($offset){
    if($this->offsetExists($offset)){
      unset($this->elements[$offset]);
    }
  }
  function __set($name, $value)
  {
    $this->elements[$name] = $value;
  }
  function __get($name)
  {
    return $this->elements[$name];
  }
  function __isset($name)
  {
    return isset($this->elements[$name]);
  }
  function __unset($name)
  {
    if(isset($this->elements[$name])){
      unset($this->elements[$name]);
    }
  }
}

usage

$container = new Container();
$container['logger'] = function ($msg){
  file_put_contents('info.log',$msg.PHP_EOL,FILE_APPEND);
};
$logger = $container->logger;
$logger('container works');

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

PHP 相关文章推荐
PHP 和 MySQL 基础教程(一)
Oct 09 PHP
MySQL相关说明
Jan 15 PHP
QueryPath PHP 中的jQuery
Apr 11 PHP
Trying to clone an uncloneable object of class Imagic的解决方法
Jan 11 PHP
CI框架开发新浪微博登录接口源码完整版
May 28 PHP
php以post形式发送xml的方法
Nov 04 PHP
PHP实现的比较完善的购物车类
Dec 02 PHP
PHP对XML内容进行修改和删除实例代码
Oct 26 PHP
PHP数组操作实例分析【添加,删除,计算,反转,排序,查找等】
Dec 24 PHP
PHP封装的PDO数据库操作类实例
Jun 21 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
PHP registerXPathNamespace()函数讲解
Feb 03 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
Jul 24 #PHP
thinkphp5.1框架容器与依赖注入实例分析
Jul 23 #PHP
Thinkphp5 自定义上传文件名的实现方法
Jul 23 #PHP
PHP中__set()实例用法和基础讲解
Jul 23 #PHP
PHP大文件分块上传功能实例详解
Jul 22 #PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 #PHP
php多进程应用场景实例详解
Jul 22 #PHP
You might like
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
firefox中用javascript实现鼠标位置的定位
2007/06/17 Javascript
javascript+mapbar实现地图定位
2010/04/09 Javascript
Three.js源码阅读笔记(基础的核心Core对象)
2012/12/27 Javascript
jquery入门必备的基本认识及实例(整理)
2013/06/24 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
js实现可兼容IE、FF、Chrome、Opera及Safari的音乐播放器
2015/02/11 Javascript
Bootstrap每天必学之导航条(二)
2016/03/01 Javascript
jQuery ajaxSubmit 实现ajax提交表单局部刷新
2016/07/04 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
nodejs模块学习之connect解析
2017/07/05 NodeJs
浅析java线程中断的办法
2018/07/29 Javascript
原生JS实现轮播图效果
2018/10/12 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
JavaScript 空间坐标的使用
2020/08/19 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[02:55]DOTA2英雄基础教程 发条技师
2013/12/04 DOTA
浅谈Django中的数据库模型类-models.py(一对一的关系)
2018/05/30 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
3分钟学会一个Python小技巧
2018/11/23 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
Python中一些深不见底的“坑”
2019/06/12 Python
python3实现绘制二维点图
2019/12/04 Python
使用python 计算百分位数实现数据分箱代码
2020/03/03 Python
python实现简单俄罗斯方块
2020/03/13 Python
Python 高效编程技巧分享
2020/09/10 Python
HTML如何让IMG自动适应DIV容器大小的实现方法
2020/02/25 HTML / CSS
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
十佳教师事迹材料
2014/01/11 职场文书
物流管理专业毕业生自荐信
2014/03/04 职场文书
移风易俗倡议书
2014/04/15 职场文书
毕业生见习报告总结
2014/11/08 职场文书
毕业论文指导老师意见
2015/06/04 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
九年级数学教学反思
2016/02/17 职场文书