文档章节

TP的内部文件储存方法与调用

熊猫88
 熊猫88
发布于 2015/12/06 19:56
字数 528
阅读 340
收藏 1

在TP框架运行的过程中,是会生成一个Runtime的文件夹的,生成该文件类是一个File.class.php的文件。
   在Think.class.php启动后
   Storage::connect(STORAGE_TYPE);
   初始化一个文件类,默认的文件是
    static public function connect($type='File',$options=array()) {
        $class  =   'Think\\Storage\\Driver\\'.ucwords($type);
        self::$handler = new $class($options);
    }
    直接初始化了File.class.php里的一个类(Think/Storage/Driver文件)
    因为TP默认的运行环境不是Sae,用的是文件储存环境。
    文件类主要方法有:
    read(同get方法,可以用read,也可以用get,主要是将文件夹里面的内容提取出来,可以获取的元素包括文件上次被修改的时间(filemtime函数获取)
    load (加载文件的方法,include的作用)
    has (功能等同于file_exists  is_file)
    unlink(删除文件)
    put(把内容写入文件里面的方法)
    append(对文件进行内容添加的方法)
    可以类似对比数据库的读取,删除,添加,修改。

    TP文件储存里比较经典并不是这四个方法,而是在 Storage类里植入。
    //当调用Storage不存在的方法的时候,会调用内层方法
    static public function __callstatic($method,$args){
        //调用缓存驱动的方法
        if(method_exists(self::$handler, $method)){
    //返回内层方法,并将内层方法自动像static方法调用
           return call_user_func_array(array(self::$handler,$method), $args);
        }
    }
    直接在系统里面引用的时候
    Storage::read('test.php')的时候,由于Storage本身不存在read的方法,会自动调用self::$handler里面的方法,这是由file或者Sae类型决定,然后就可以直接调用内层的公共方法。

以下是 call_user_func_array,__callstatic,的用法案例,这种方法可以减少很多static的加入

<?php
class  test1  {
  static protected $a;
  static public  function testmethod(){
    self::$a = new test2();
  }

  static public  function __callstatic($method,$args){
 return  call_user_func_array(array(self::$a,$method),$args);
  }
  
}

class  test2 {

public  function  hello($x) {
    echo  $x;
}
}

test1::testmethod();
test1::hello(2);

?>


© 著作权归作者所有

熊猫88
粉丝 18
博文 76
码字总数 65366
作品 0
程序员
私信 提问
使用C语言扩展Python(四)

上一篇里的LAME项目已经展示了python如何与C语言交互,但程序仍不够理想,在python这一端仅仅是传递源文件和目标文件的路径,再调用C模块的encode方法来进行编码,但问题在于你无法控制encod...

嗯哼9925
2018/01/07
0
0
TP的php日志记录类解析

PHP运行的时候缺少一个后台,不能直接从后台看到日志的各种运行信息。但是在正常写代码里,我们又需要不断的获取到运行的信息。在php的信息记录函数里面,内置了一个errorlog的函数用来记录错...

熊猫88
2015/12/07
1K
0
微信接口开发流程

选好一个可以嵌入微信接口开发权限的系统。理论上讲,所有的系统都是可以用来做微信接口的二次开发的,只要具备用户管理功能的系统。因为开发之后,还会涉及到一些微信的管理。我这里选取了o...

熊猫88
2015/11/30
1K
0
看书 Python 源码分析笔记 (九) 类机制二

今天继续学习第十二章 类体系(下) 用户自定义 class 本节学习用户自定义 type (class). 下面的示例 python 类包含类定义, 构造函数, 实例化等多个要点: (编译后形成多个 PyCodeObject, 以及其...

刘军兴
2015/12/24
134
0
C++ 的 C 方式编译和 C 链接约定

原文:C++ 的 C 编译和链接方式 (VC) 作者:Breaker C++ 与 C 的编译方式 所有的 C 程序都是 C++ 程序,而所有的 C++ 编译器都是 C 编译器(几乎所有),兼容 C99 标准 wiki: C99。一些编译器...

晨曦之光
2012/05/23
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

微服务架构一直火,为什么服务化要搞懂?

微服务架构,这 5 年左右一直被认可,是软件架构的未来方向。需要大家理解的是,为什么需要服务化。比如微服务架构对企业来说,带来什么价值?有啥弊端? 这里浅谈一下微服务架构,主要还是在...

泥瓦匠BYSocket
41分钟前
3
0
总结:单机与分布式

传统计算方案演变 1、单机并行运算 1,打开数据源 2,统计出有多少个文件。 3,为每个文件执行相同的统计命令 4,等待所有命令执行成功。 5,合并统计后结果输出或执行进一步统计 2、分布式并...

浮躁的码农
52分钟前
5
0
关于怎么解决CENTOS7没有ETH0网卡这个问题

CentOS7系统安装完毕之后,输入ifconfig命令发现没有eth0,不符合我们的习惯。而且也无法远程ssh连接。 1.进入目录/etc/sysconfig/network-scripts/ 2.将文件ifcfg-ens33重命名为ifcfg-eth0;...

无名氏的程序员
58分钟前
5
0
HTML5 Web Storage 存储介绍

Web Storage是HTML5 API提供一个新的重要的特性; 最新的Web Storage草案中提到,在web客户端可用html5 API,以Key-Value形式来进行数据持久存储; 目前主要的浏览器已经支持该功能: 常见的...

前端老手
今天
5
0
安装mxnet出现的错误

我出现下面的错误:是因为我前面的安装步骤都正确,只是这一步出现错误,sudo python setup.py install 其实我看了下我默认的python是3.6,是大于3.5 ,改为sudo python3 setup.py install就...

南桥北木
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部