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 可阅读随机字符串代码
May 26 PHP
php类中private属性继承问题分析
Nov 01 PHP
php导出word文档与excel电子表格的简单示例代码
Mar 08 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
PHP实现简单爬虫的方法
Jul 29 PHP
thinkphp微信开发(消息加密解密)
Dec 02 PHP
PHP简单判断字符串是否包含另一个字符串的方法
Mar 25 PHP
基于php实现的验证码小程序
Dec 13 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
Dec 14 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
php 根据URL下载远程图片、压缩包、pdf等文件到本地
Jul 26 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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学习 函数 课件
2008/06/15 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
利用php做服务器和web前端的界面进行交互
2016/10/31 PHP
PHP filesize函数用法浅析
2019/02/15 PHP
laravel 实现登陆后返回登陆前的页面方法
2019/10/03 PHP
如何在Mozilla Gecko 用Javascript加载XSL
2007/01/09 Javascript
Jquery判断IE6等浏览器的代码
2011/04/05 Javascript
自定义的一个简单时尚js下拉选择框
2013/11/20 Javascript
jquery ajaxSubmit 异步提交的简单实现
2014/02/28 Javascript
js获取指定日期周数以及星期几的小例子
2014/06/27 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
JavaScript引用类型和基本类型详解
2016/01/06 Javascript
微信小程序实现倒计时60s获取验证码
2020/04/17 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
js实现上下左右键盘控制div移动
2020/01/16 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
[05:53]敌法师的金色冠名ID"BurNIng",是传说,是荣耀
2020/07/11 DOTA
python代码制作configure文件示例
2014/07/28 Python
Python3实现连接SQLite数据库的方法
2014/08/23 Python
python使用marshal模块序列化实例
2014/09/25 Python
python实现批量获取指定文件夹下的所有文件的厂商信息
2014/09/28 Python
Python Web框架Flask中使用新浪SAE云存储实例
2015/02/08 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python中join()方法介绍
2018/10/11 Python
Python字典遍历操作实例小结
2019/03/05 Python
Ubuntu权限不足无法创建文件夹解决方案
2020/11/14 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
经典的毕业生自荐信范文
2014/04/14 职场文书
竞聘演讲稿
2014/04/24 职场文书
幼儿园大班个人总结
2015/02/28 职场文书