-
Notifications
You must be signed in to change notification settings - Fork 18
extension function
tolizhan edited this page Dec 1, 2024
·
4 revisions
-
-
$key指定获取的常量值,null返回所有常量,未找到返回null可以获取的常量 :
{ 'file' : 当前扩展文件路径, 等同__FILE__魔术常量 'eKey' : 当前扩展的扩展键 'eDbPre' : 当前扩展的数据库前缀 'eDir' : 当前扩展根目录的磁盘路径 'eUrl' : 当前扩展根目录的网络路径 'sDir' : 当前扩展存储目录的磁盘路径 'sUrl' : 当前扩展存储目录的网络路径 'matchUri' : 当前匹配的页面地址 }
-
-
返回动态扩展独享页面地址,使用前要在配置文件matches下填写对应的匹配扩展页面
-
$a指定匹配a参数值必须在匹配页面中存在才有效
-
$params自定义get参数其中e默认内当前扩展键,也可以指定其它扩展键
//生成动态页面地址(一个仅由本扩展使用的地址) echo $this->_getExUrl('sd');
-
-
-
$className相对类名指定要调用类文件的相对类名
-
$isNew是否创建对象默认true=创建,false=返回完整类名
-
$eKey扩展键默认为当前扩展键,也可以指定其它扩展键
//加载扩展类演示 $this->_loadClass('main_demo') //加载并编译/main/demo.php类文件 ->callTest(); //调用callTest方法
-
-
-
$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' ));
-
-
-
$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' : '测试数据'}
-
-
$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')); //使用常规数据库
-
-
$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('自定义私有钩子参数')); //添加私有钩子
-
-
-
$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('触发时私有钩子参数')); //触发私有钩子
-
-
-
$type钩子类型无法移除其它扩展的钩子
-
$callback移除指定的回调钩子支持'相对类名::方法名',['相对类名', '方法名'],[对象,'方法名']格式
默认会移除当前扩展指定钩子的全部方法 -
$index引用数据结构为{'callbackParse' : 解析的移除回调}
//钩子演示 $this->_removeHook('ss'); //移除全部钩子 $this->_removeHook('_s', array($this, 'callbackPrivateHookTest')); //移除指定钩子
-
手册地址 http://phpof.net/
- 入门指引
-
疑难解答
- 部署时会遇到的那些常见问题
简单却容易忽视 - 框架内置有哪些管理界面
生产模式进入界面需用 __OF_DEBUG__ - 如何定制不同的架构模式
通过配置入口文件中调度方法的参数即可 - 如何面向命名空间开发
of_xx 类可以按照命名空间方式调用 - 如何设置不同的部署模式
通过_of.debug设置 开发,测试,生产 模式 - 为什么控制层类文件要返回true
这是防止非法访问的方法之一 - 为什么传到视图层的变量会被编码
这是因为 XSS 安全防范的原因 - 为什么框架没有SQL构造器
因常规方案牺牲了性能又未很好解决问题 - 如何快速开发用户及权限管理功能
单点登录(SSO)模块因此而存在 - 怎么在系统的基础上扩展底层功能
三点: 扩展开发, 预先加载, 底层钩子 - 怎么使用 Composer 依赖管理工具
框架已集成, 默认关闭状态
- 部署时会遇到的那些常见问题
- 组件使用
- 集成插件
- 扩展开发
- 开发手册