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概述.
Oct 09 PHP
探讨如何把session存入数据库
Jun 07 PHP
Apache连接PHP后无法启动问题解决思路
Jun 18 PHP
PHP和C#可共用的可逆加密算法详解
Oct 26 PHP
PHP实现添加购物车功能
Mar 06 PHP
PHP提取字符串中的手机号正则表达式怎么写
Jul 17 PHP
PHP 文件锁与进程锁的使用示例
Aug 07 PHP
PHP设计模式之原型设计模式原理与用法分析
Apr 25 PHP
Yii2框架数据验证操作实例详解
May 02 PHP
php常用字符串长度函数strlen()与mb_strlen()用法实例分析
Jun 25 PHP
PHP终止脚本运行三种实现方法详解
Sep 01 PHP
PHP队列场景以及实现代码实例详解
Feb 26 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 全文搜索和替换的实现代码
2008/07/29 PHP
Php output buffering缓存及程序缓存深入解析
2013/07/15 PHP
javascript取消文本选定的实现代码
2010/11/14 Javascript
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
js格式化时间的方法
2015/12/18 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
JS实现自动阅读单词(有道单词本添加功能)
2016/11/14 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
jQuery实现的滑块滑动导航效果示例
2018/06/04 jQuery
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
微信小程序图表插件wx-charts用法实例详解
2019/05/20 Javascript
微信小程序模板消息推送的两种实现方式
2019/08/27 Javascript
vue中提示$index is not defined错误的解决方式
2020/09/02 Javascript
JS如何实现在弹出窗口中加载页面
2020/12/03 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
在Python中使用Neo4j数据库的教程
2015/04/16 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
python多进程读图提取特征存npy
2019/05/21 Python
Django高级编程之自定义Field实现多语言
2019/07/02 Python
pycharm配置git(图文教程)
2019/08/16 Python
用Python解数独的方法示例
2019/10/24 Python
Python hashlib加密模块常用方法解析
2019/12/18 Python
Python抓新型冠状病毒肺炎疫情数据并绘制全国疫情分布的代码实例
2020/02/05 Python
Scrapy框架实现的登录网站操作示例
2020/02/06 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
python:HDF和CSV存储优劣对比分析
2020/06/08 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
Python子进程subpocess原理及用法解析
2020/07/16 Python
html5实现的便签特效(实战分享)
2013/11/29 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
美国高品质个性化珠宝销售网站:Jewlr
2018/05/03 全球购物
中学生关于梦想的演讲稿
2014/08/22 职场文书
晚会闭幕词
2015/01/28 职场文书
优秀共产党员主要事迹材料
2015/11/05 职场文书
python数字图像处理:图像的绘制
2022/06/28 Python