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 相关文章推荐
mysql 的 like 问题,超强毕杀记!!!
Jan 18 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
Nov 01 PHP
通过JavaScript或PHP检测Android设备的代码
Mar 09 PHP
Warning: session_destroy() : Trying to destroy uninitialized sessionq错误
Jun 16 PHP
PHP函数学习之PHP函数点评
Jul 05 PHP
ThinkPHP 连接Oracle数据库的详细教程[全]
Jul 16 PHP
php获取用户IPv4或IPv6地址的代码
Nov 15 PHP
php mail to 配置详解
Jan 16 PHP
ThinkPHP2.0读取MSSQL提示Incorrect syntax near the keyword 'AS'的解决方法
Jun 25 PHP
将PHP从5.3.28升级到5.3.29时Nginx出现502错误
May 09 PHP
PHP利用超级全局变量$_POST来接收表单数据的实例
Nov 05 PHP
PHP延迟静态绑定使用方法实例解析
Sep 05 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 trim 去除空字符的定义与语法介绍
2010/05/31 PHP
PHP实现文件下载详解
2014/11/27 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
php实现的后台表格分页功能示例
2017/10/23 PHP
项目实践之javascript技巧
2007/12/06 Javascript
关于Mozilla浏览器不支持innerText的解决办法
2011/01/01 Javascript
javascript 日期时间 转换的方法
2013/02/21 Javascript
Javascript中Event属性搜集整理
2013/09/17 Javascript
使用纯javascript实现放大镜效果
2015/03/18 Javascript
JavaScript中数组继承的简单示例
2015/07/29 Javascript
Vue实现双向绑定的方法
2016/12/22 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
Bootstrap表单简单实现代码
2017/03/06 Javascript
JS实现的找零张数最小问题示例
2017/11/28 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
javascript获取元素的计算样式
2019/05/24 Javascript
JavaScript实现移动小精灵的案例代码
2020/12/12 Javascript
如何运行Python程序的方法
2013/04/21 Python
Python struct模块解析
2014/06/12 Python
python编程开发之类型转换convert实例分析
2015/11/13 Python
基于Python对象引用、可变性和垃圾回收详解
2017/08/21 Python
Python实现的简单模板引擎功能示例
2017/09/02 Python
python在html中插入简单的代码并加上时间戳的方法
2018/10/16 Python
Pycharm新建模板默认添加个人信息的实例
2019/07/15 Python
python如何实现数据的线性拟合
2019/07/19 Python
Python netmiko模块的使用
2020/02/14 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
2020/07/03 Python
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
《二泉映月》教学反思
2014/04/15 职场文书
合作经营协议书范本
2014/04/17 职场文书
党员“四风”问题批评与自我批评思想汇报
2014/10/06 职场文书
2014年营业员工作总结
2014/11/18 职场文书
处级干部考察材料
2014/12/24 职场文书
导游词格式
2015/02/13 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书