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 相关文章推荐
phpmail类发送邮件函数代码
Feb 20 PHP
php提示Call-time pass-by-reference has been deprecated in的解决方法[已测]
May 06 PHP
解析如何通过PHP函数获取当前运行的环境 来进行判断执行逻辑(小技巧)
Jun 25 PHP
linux系统下php安装mbstring扩展的二种方法
Jan 20 PHP
php通过隐藏表单控件获取到前两个页面的url
Sep 09 PHP
PHP实现服务器状态监控的方法
Dec 09 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
Cygwin中安装PHP方法步骤
Jul 04 PHP
yii2中结合gridview如何使用modal弹窗实例代码详解
Jun 12 PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 PHP
PHP 进度条函数的简单实例
Sep 19 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 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+ajax实时输入自动搜索匹配的方法
2014/12/26 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
2016/08/17 PHP
PHP中empty,isset,is_null用法和区别
2017/02/19 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
PHP实现的日历功能示例
2018/09/01 PHP
CI框架教程之优化验证码机制详解【验证码辅助函数】
2019/04/16 PHP
ExtJS 工具栏 分页事件参数
2010/03/05 Javascript
用js实现的模拟jquery的animate自定义动画(2.5K)
2010/07/20 Javascript
js点击更换背景颜色或图片的实例代码
2013/06/25 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
Javascript中innerHTML用法实例分析
2015/01/12 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
Bootstrap 下拉多选框插件Bootstrap Multiselect
2017/01/22 Javascript
Vue2.0实现将页面中表格数据导出excel的实例
2017/08/09 Javascript
关于axios如何全局注册浅析
2018/01/14 Javascript
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
2018/05/09 jQuery
浅析vue 函数配置项watch及函数 $watch 源码分享
2018/11/22 Javascript
如何在项目中使用log4.js的方法步骤
2019/07/16 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
简单介绍Python中利用生成器实现的并发编程
2015/05/04 Python
Python 实现文件的全备份和差异备份详解
2016/12/27 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
Pycharm设置界面全黑的方法
2018/05/23 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
python解压TAR文件至指定文件夹的实例
2019/06/10 Python
对Python中class和instance以及self的用法详解
2019/06/26 Python
Python实现个人微信号自动监控告警的示例
2019/07/03 Python
如何基于python实现画不同品种的樱花树
2020/01/03 Python
大学同学聚会邀请函
2014/01/29 职场文书
2016年大学生暑假爱心支教活动策划书
2015/11/26 职场文书
加薪申请书应该这样写!
2019/07/04 职场文书
Redis6.0搭建集群Redis-cluster的方法
2021/05/08 Redis