Skip to content

extension function

tolizhan edited this page Dec 1, 2024 · 4 revisions

内置方法

$this->_getConst([string $key = null])

  • 获取扩展类内置常量

    • $key指定获取的常量值,null返回所有常量,未找到返回null
      可以获取的常量 :
      {
          'file'     : 当前扩展文件路径, 等同__FILE__魔术常量
          'eKey'     : 当前扩展的扩展键
          'eDbPre'   : 当前扩展的数据库前缀
          'eDir'     : 当前扩展根目录的磁盘路径
          'eUrl'     : 当前扩展根目录的网络路径
          'sDir'     : 当前扩展存储目录的磁盘路径
          'sUrl'     : 当前扩展存储目录的网络路径
          'matchUri' : 当前匹配的页面地址
      }

$this->_getExUrl(string $a[, array $params = array()])

  • 返回动态扩展独享页面地址,使用前要在配置文件matches下填写对应的匹配扩展页面

    • $a指定匹配a参数
      值必须在匹配页面中存在才有效
    • $params自定义get参数
      其中e默认内当前扩展键,也可以指定其它扩展键
    //生成动态页面地址(一个仅由本扩展使用的地址)
    echo $this->_getExUrl('sd');

$this->_loadClass($className[, $isNew = true[, $eKey = null]])

  • 加载扩展类

    • $className相对类名
      指定要调用类文件的相对类名
    • $isNew是否创建对象
      默认true=创建,false=返回完整类名
    • $eKey扩展键
      默认为当前扩展键,也可以指定其它扩展键
    //加载扩展类演示
    $this->_loadClass('main_demo')    //加载并编译/main/demo.php类文件
         ->callTest();                //调用callTest方法

$this->_loadFile(string|array $path[, $fileExtend = null])

  • 以不同方式加载文件

    • $path加载文件路径
      以当前扩展根目录的'/xx/xxx'格式路径
    • $fileExtend强制文件扩展名,默认null自动识别扩展名
      php=include方式加载并返回php返回值; js=打印script标签,自带两个属性(eUrl:扩展路径, eKey:扩展键),并激活语言包; css=打印link标签; 其他=打印网络路径
    //加载文件演示
    $this->_loadFile('/main/loadFileTest.php');           //加载并返回代码值
    $this->_loadFile('/main/loadFileTest.php', 'dir');    //打印网络路径
    $this->_loadFile('/main/loadFileTest.php', 'css');    //指定css方式加载
    $this->_loadFile(array(                               //匹配加载
        '/main/loadFileTest.js',
        '/main/loadFileTest.php'
    ));

 $this->_shareData($command = null)

  • 操作共享数据(可以理解为简陋的数据库),以引用方式返回数据

    • $command操作命令
      null=共享方式读取数据, true=独享方式读取数据(加锁), false=(解锁) 将返回的引用数据设为null,会重新读取数据,否则读取缓存数据
    //sharedData演示
    $data = &$this->_shareData();        //读取原始数据 {'test' : '原始数据'} 假设值
    $data['test'] = '演示数据';          //修改缓存数据 {'test' : '演示数据'} 本次会话中数据是共享的,但不允许保存
    $this->_shareData();                 //读取缓存数据 {'test' : '演示数据'}
    $data = null;                        //重置缓存数据 null
    $this->_shareData();                 //读取原始数据 {'test' : '原始数据'}
    $data['test'] = '演示数据';          //修改缓存数据 {'test' : '演示数据'}
    $this->_shareData(true);             //加锁原始数据 {'test' : '原始数据'} 只有加锁后才允许保存
    $data['test'] = '测试数据';          //修改缓存数据 {'test' : '测试数据'} 本次会话中数据是共享的,并且允许保存
    $temp = $this->_shareData(false);    //解锁保存数据 {'test' : '测试数据'}
    echo $temp ? '成功' : '失败';        //缓存数据是数组 且 保存成功 ? true : false
    print_r($data);                      //打印数据    {'test' : '测试数据'}

 &$this->_sql($sql, $key = 'default')

  • 获取数据连接或执行sql

    $sqlstring, null, true, false
    字符串 = 执行传入的sql, null = 开启事务, true = 提交事务, false = 回滚事务
    keystring
    多池区分符, 指定 框架配置['db'] 中的键或者 of_db::setPool 设置的键
    //执行sql演示
    $ePrefix = $this->_getConst('eDbPre');                   //当前扩展的数据库前缀
    print_r($this->_sql("SELECT * FROM `{$ePrefix}cc`"));    //使用扩展数据库
    print_r($this->_sql('SELECT "sql演示" test'));            //使用常规数据库

 $this->_addHook(string $type, string|array $callback[, $params = null])

  • 添加钩子

    • $type钩子类型
      私有钩子以'_'开头,内置钩子以'::'开头,其余为公有钩子
      ::halt         页面运行结束时触发
      ::sqlBefore    执行sql前触发
      ::sqlAfter     执行sql后触发
      ::view         加载模板文件时触发
    • $callback触发时调用的方法
      支持'相对类名::方法名',['相对类名', '方法名'],[对象,'方法名']格式
    • $params自定义参数,由callback第二个参数接收,null=默认
      钩子不会出现两个相同的$callback,后一个$params会覆盖前一个
    //钩子演示
    $this->_addHook('ss', array($this, 'callbackPublicHookTest'), array('自定义公有参数'));         //添加公有钩子
    $this->_addHook('_s', array($this, 'callbackPrivateHookTest'), array('自定义私有钩子参数'));    //添加私有钩子

 $this->_fireHook(string $type[, $params = null])

  • 触发钩子

    • $type钩子类型
      无法触发其它扩展的私有类型钩子
    • $params传递参数
      由触发方法的第一个参数接收,默认为null
      ::halt         {'parse' : 是一个返回引用值的方法, 调用时传递一个参数("str"=返回响应的字符串,"obj"=将响应字符串解析并返回hParse对象)}
      ::sqlBefore    {'sql' : &执行的sql语句, 'key' : 连接池}
      ::sqlAfter     {'sql' : &执行的sql语句, 'result' : &返回的结果集, 'key' : 连接池}
      ::view         {'tplDir' : &加载的模板路径, 'viewObj' : 传递到模板路径中的参数对象}
    //钩子演示
    $this->_fireHook('ss', array('触发时公有参数'));       //触发公有钩子
    $this->_fireHook('_s', array('触发时私有钩子参数'));    //触发私有钩子

 $this->_removeHook(string $type[, string|array $callback = null, [, $params = null]])

  • 移除钩子

    • $type钩子类型
      无法移除其它扩展的钩子
    • $callback移除指定的回调钩子
      支持'相对类名::方法名',['相对类名', '方法名'],[对象,'方法名']格式
      默认会移除当前扩展指定钩子的全部方法
    • $index引用数据
      结构为{'callbackParse' : 解析的移除回调}
    //钩子演示
    $this->_removeHook('ss');                                             //移除全部钩子
    $this->_removeHook('_s', array($this, 'callbackPrivateHookTest'));    //移除指定钩子
Clone this wiki locally