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 相关文章推荐
使用网络地址转换实现多服务器负载均衡
Oct 09 PHP
php 数组的指针操作实现代码
Feb 08 PHP
PHP文件打开、关闭、写入的判断与执行代码
May 24 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
深入php-fpm的两种进程管理模式详解
Jun 03 PHP
解析zend studio中直接导入svn中的项目的方法步骤
Jun 21 PHP
PHP Switch 语句之学习笔记
Sep 21 PHP
Thinkphp模板中截取字符串函数简介
Jun 17 PHP
ThinkPHP入库出现两次反斜线转义及数据库类转义的解决方法
Nov 04 PHP
thinkPHP中分页用法实例分析
Dec 26 PHP
分析PHP中单双引号的误区和双引号小隐患
Jul 19 PHP
php实现记事本案例
Oct 20 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中通过curl检测页面是否被百度收录
2013/09/27 PHP
CentOS安装php v8js教程
2015/02/26 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
详解WordPress开发中get_header()获取头部函数的用法
2016/01/08 PHP
Thinkphp3.2.3整合phpqrcode生成带logo的二维码
2016/07/21 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
prototype1.4中文手册
2006/09/22 Javascript
从URL中提取参数与将对象转换为URL查询参数的实现代码
2012/01/12 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
javascript禁用Tab键脚本实例
2013/11/22 Javascript
javascript创建数组之联合数组的使用方法示例
2013/12/26 Javascript
DOM 事件流详解
2015/01/20 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
Bootstrap幻灯片轮播图支持触屏左右手势滑动的实现方法
2016/10/13 Javascript
angular2路由切换改变页面title的示例代码
2017/08/23 Javascript
基于DOM节点删除之empty和remove的区别(详解)
2017/09/11 Javascript
layui table设置前台过滤转义等方法
2018/08/17 Javascript
JavaScript实现随机点名小程序
2020/10/29 Javascript
详解Vue 的异常处理机制
2020/11/30 Vue.js
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Python scikit-learn 做线性回归的示例代码
2017/11/01 Python
cProfile Python性能分析工具使用详解
2019/07/22 Python
通过代码实例了解Python3编程技巧
2020/10/13 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
英国门把手公司:Door Handle Company
2019/05/12 全球购物
外企测试工程师面试题
2015/02/01 面试题
最受欢迎的自我评价
2013/12/22 职场文书
幼儿教育感言
2014/02/05 职场文书
自主招生学校推荐信
2014/09/26 职场文书
先进基层党组织事迹材料
2014/12/25 职场文书
2015年安全生产工作总结范文
2015/04/02 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
检讨书范文大全
2015/05/07 职场文书
python使用pygame创建精灵Sprite
2021/04/06 Python