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中的CMS的涵义
Mar 11 PHP
dedecms中常见问题修改方法总结
Mar 21 PHP
php5 图片验证码实现代码
Dec 11 PHP
PHP数组对比函数,存在交集则返回真,否则返回假
Feb 03 PHP
div li的多行多列 无刷新分页示例代码
Oct 16 PHP
php function用法如何递归及return和echo区别
Mar 07 PHP
php中file_exists函数使用详解
May 08 PHP
PHP通过串口实现发送短信
Jul 08 PHP
php中array_unshift()修改数组key注意事项分析
May 16 PHP
PHP实现支持加盐的图片加密解密
Sep 09 PHP
php mysql实现mysql_select_db选择数据库
Dec 30 PHP
php多进程模拟并发事务产生的问题小结
Dec 07 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实现过滤表单提交中html标签的方法
2014/10/17 PHP
ci检测是ajax还是页面post提交数据的方法
2014/11/10 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
php array_values 返回数组的值实例详解
2016/11/17 PHP
PHP-CGI远程代码执行漏洞分析与防范
2017/05/07 PHP
Laravel 自动生成验证的实例讲解:login / logout
2019/10/14 PHP
学习ExtJS border布局
2009/10/08 Javascript
window.dialogArguments 使用说明
2011/04/11 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
js函数名与form表单元素同名冲突的问题
2014/03/07 Javascript
jquery获取对象的方法足以应付常见的各种类型的对象
2014/05/14 Javascript
jQuery学习笔记之jQuery+CSS3的浏览器兼容性
2015/01/19 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
node 命令方式启动修改端口的方法
2018/05/12 Javascript
微信小程序http连接访问解决方案的示例
2018/11/05 Javascript
全面了解JavaScript的作用域链
2019/04/03 Javascript
在vue中使用Base64转码的案例
2020/08/07 Javascript
[03:37]2015国际邀请赛第四日现场精彩集锦
2015/08/08 DOTA
使用FastCGI部署Python的Django应用的教程
2015/07/22 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
python sorted方法和列表使用解析
2019/11/18 Python
python中的subprocess.Popen()使用详解
2019/12/25 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
2020/04/22 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
Python 打印自己设计的字体的实例讲解
2021/01/04 Python
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
Gap工厂店:Gap Factory
2017/11/02 全球购物
培训讲师邀请函
2014/01/10 职场文书
设计顾问服务计划书
2014/05/04 职场文书
心理咨询专业自荐信
2014/07/07 职场文书
六年级语文教学反思
2016/03/03 职场文书
《学会生存》读后感3篇
2019/12/09 职场文书