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 动态随机生成验证码类代码
Apr 09 PHP
PHP 命名空间实例说明
Jan 27 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
ThinkPHP关联模型操作实例分析
Sep 23 PHP
php中$美元符号与Zen Coding冲突问题解决方法分享
May 28 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
php隐藏IP地址后两位显示为星号的方法
Nov 21 PHP
php异常处理方法实例汇总
Jun 24 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
iOS+PHP注册登录系统 PHP部分(上)
Dec 26 PHP
php获取数据库中数据的实现方法
Jun 01 PHP
PHP面向对象之领域模型+数据映射器实例(分析)
Jun 21 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
php设计模式 Interpreter(解释器模式)
2011/06/26 PHP
ThinkPHP独立分组使用的注意事项
2014/11/25 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
使用Yii2实现主从数据库设置
2016/11/20 PHP
新手入门常用代码集锦
2007/01/11 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
jQuery文本框得到与失去焦点动态改变样式效果
2016/09/08 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
微信小程序搜索功能(附:小程序前端+PHP后端)
2019/02/28 Javascript
Vue+ElementUI项目使用webpack输出MPA的方法
2019/08/27 Javascript
vue.js实现h5机器人聊天(测试版)
2020/07/16 Javascript
Vue通过阿里云oss的url连接直接下载文件并修改文件名的方法
2020/12/25 Vue.js
[45:14]Optic vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.24
2018/08/25 DOTA
Python实现文件按照日期命名的方法
2015/07/09 Python
python使用正则表达式替换匹配成功的组
2017/11/17 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
python样条插值的实现代码
2018/12/17 Python
Python判断有效的数独算法示例
2019/02/23 Python
Keras使用tensorboard显示训练过程的实例
2020/02/15 Python
python实现126邮箱发送邮件
2020/05/20 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
日本小田急百货官网:Odakyu
2018/07/19 全球购物
局域网定义和特性
2016/01/23 面试题
普罗米修斯教学反思
2014/02/06 职场文书
优秀毕业生自我鉴定
2014/02/11 职场文书
保密承诺书范文
2014/03/27 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
公司离职证明样本
2014/09/13 职场文书
2014年法务工作总结
2014/12/11 职场文书
党员证明信
2015/06/19 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
Go语言应该什么情况使用指针
2021/07/25 Golang
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL