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 相关文章推荐
ip签名探针
Oct 09 PHP
PHP与MySQL交互使用详解
Oct 09 PHP
安装APACHE
Jan 15 PHP
Views rows style模板重写代码
May 16 PHP
php二维数组用键名分组相加实例函数
Nov 06 PHP
php环境无法上传文件的解决方法
Apr 30 PHP
PHP根据两点间的经纬度计算距离
Oct 31 PHP
一个PHP实现的轻量级简单爬虫
Jul 08 PHP
PHP的PDO操作简单示例
Mar 30 PHP
thinkPHP中volist标签用法示例
Dec 06 PHP
PHP获取日期对应星期、一周日期、星期开始与结束日期的方法
Jun 22 PHP
laravel异步监控定时调度器实例详解
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
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
详解Yii2.0 rules验证规则集合
2017/03/21 PHP
thinkphp5.1框架容器与依赖注入实例分析
2019/07/23 PHP
打造基于jQuery的高性能TreeView(asp.net)
2011/02/23 Javascript
JavaScript Array Flatten 与递归使用介绍
2011/10/30 Javascript
图片无缝滚动代码(向左/向下/向上)
2013/04/10 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
Jquery显示和隐藏元素或设为只读(含Ligerui的控件禁用,实例说明介绍)
2013/07/09 Javascript
用JavaScript判断CSS浏览器类型前缀的两种方法
2015/10/08 Javascript
AngularJS中$interval的用法详解
2016/02/02 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
JavaScript输入框字数实时统计更新
2017/06/17 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
uni-app如何实现增量更新功能
2020/01/03 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
python批量导出导入MySQL用户的方法
2013/11/15 Python
使用Django的模版来配合字符串翻译工作
2015/07/27 Python
python3爬取各类天气信息
2018/02/24 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python命令行参数用法实例分析
2019/06/25 Python
简述python Scrapy框架
2020/08/17 Python
override和overload的区别
2016/03/09 面试题
如何通过 CSS 写出火焰效果
2021/03/24 HTML / CSS
珍珠鸟教学反思
2014/02/01 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
食品安全演讲稿
2014/09/01 职场文书
镇班子对照检查材料思想汇报
2014/09/24 职场文书
私用公车造成事故检讨书
2014/11/16 职场文书
2014年保育员工作总结
2014/12/02 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
MySQL优化之如何写出高质量sql语句
2021/05/17 MySQL
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
SQL模糊查询报:ORA-00909:参数个数无效问题的解决
2021/06/21 Oracle