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 相关文章推荐
echo(),print(),print_r()之间的区别?
Nov 19 PHP
扩展你的 PHP 之入门篇
Dec 04 PHP
PHP 开发环境配置(Zend Studio)
Apr 28 PHP
PHP 小心urldecode引发的SQL注入漏洞
Oct 27 PHP
PHP写的求多项式导数的函数代码
Jul 04 PHP
去除php注释和去除空格函数分享
Mar 13 PHP
ThinkPHP分组下自定义标签库实例
Nov 01 PHP
CentOS下PHP7的编译安装及MySQL的支持和一些常见问题的解决办法
Dec 17 PHP
Ajax PHP JavaScript MySQL实现简易无刷新在线聊天室
Aug 17 PHP
PHP array_reduce()函数的应用解析
Oct 28 PHP
PHP中散列密码的安全性分析
Jul 26 PHP
thinkphp5.1框架实现格式化mysql时间戳为日期的方式小结
Oct 10 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中Date获取时间不正确怎么办
2008/06/05 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
Mysql中分页查询的两个解决方法比较
2013/05/02 PHP
ThinkPHP整合datatables实现服务端分页的示例代码
2018/02/10 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
PHP Swoole异步MySQL客户端实现方法示例
2019/10/24 PHP
JQuery index()方法使用代码
2010/06/02 Javascript
JS去除数组重复值的五种不同方法
2013/09/06 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
javascript通过获取html标签属性class实现多选项卡的方法
2015/07/27 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
Jquery ajax请求导出Excel表格的实现代码
2016/06/08 Javascript
JS键盘版计算器的制作方法
2016/12/03 Javascript
JavaScript中Math对象的方法介绍
2017/01/05 Javascript
B/S(Web)实时通讯解决方案分享
2017/04/06 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
详解JavaScript 作用域
2020/07/14 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
Python中用startswith()函数判断字符串开头的教程
2015/04/07 Python
python制作花瓣网美女图片爬虫
2015/10/28 Python
Python中方法链的使用方法
2016/02/23 Python
python将一组数分成每3个一组的实例
2018/11/14 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
HTML5实时语音通话聊天MP3压缩传输3KB每秒
2019/08/28 HTML / CSS
三年级音乐教学反思
2014/01/28 职场文书
体育教师个人的自我评价
2014/02/16 职场文书
大学毕业生推荐信
2014/07/09 职场文书
2014四风问题对照检查材料范文
2014/09/15 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
2015年世界急救日宣传活动方案
2015/05/06 职场文书
院系推荐意见
2015/06/05 职场文书
2016入党积极分子考察评语
2015/12/01 职场文书
浅谈Java父子类加载顺序
2021/08/04 Java/Android
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers