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 mail 通过Windows的SMTP发送邮件失败的解决方案
May 27 PHP
php 上传功能实例代码
Apr 13 PHP
php提交表单时判断 if($_POST[submit])与 if(isset($_POST[submit])) 的区别
Feb 08 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
Jun 19 PHP
zend framework重定向方法小结
May 28 PHP
PHP中Array相关函数简介
Jul 03 PHP
Yii2创建表单(ActiveForm)方法详解
Jul 23 PHP
php使用FFmpeg接口获取视频的播放时长、码率、缩略图以及创建时间
Nov 07 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
php数组指针函数功能及用法示例
Feb 11 PHP
phpstorm激活码2020附使用详细教程
Sep 25 PHP
PHP 时间处理类Carbon
May 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获取网页中图片、DIV内容的简单方法
2014/06/19 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
Smarty高级应用之缓存操作技巧分析
2016/05/14 PHP
浅析php-fpm静态和动态执行方式的比较
2016/11/09 PHP
微信公众号模板消息群发php代码示例
2016/12/29 PHP
yii2实现 "上一篇,下一篇" 功能的代码实例
2017/02/04 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
alert中断settimeout计时功能
2013/07/26 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
javascript中通过arguments参数伪装方法重载
2014/10/08 Javascript
javascript模拟命名空间
2015/04/17 Javascript
理解javascript异步编程
2016/01/27 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
jQuery Chart图表制作组件Highcharts用法详解
2016/06/01 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
angularjs实现搜索的关键字在正文中高亮出来
2017/06/13 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
浅谈开发eslint规则
2018/10/01 Javascript
vue实现二级导航栏效果
2019/10/19 Javascript
利用Python在一个文件的头部插入数据的实例
2018/05/02 Python
如何使用Python 打印各种三角形
2019/06/28 Python
Django框架视图层URL映射与反向解析实例分析
2019/07/29 Python
Python实现基于socket的udp传输与接收功能详解
2019/11/15 Python
魔幻般冒泡背景的CSS3按钮动画
2016/02/27 HTML / CSS
美国著名童装品牌:OshKosh B’gosh
2016/08/05 全球购物
用C#语言写出与SQLSERVER访问时的具体过程
2013/04/16 面试题
授权委托书
2014/09/17 职场文书
标准单位租车协议书
2014/09/23 职场文书
员工教育培训协议书
2014/09/27 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
创作书写之导游词实用技巧分享(干货)
2019/12/20 职场文书
Golang 字符串的常见操作
2022/04/19 Golang
PYTHON基于Pyecharts绘制常见的直角坐标系图表
2022/04/28 Python