G 函数:调试统计: ThinkPHP长期以来需要通过debug_start、debug_end方法甚至Debug类才能完成的功能,3.1版本中被一个简单的G方法取代了,不可不谓是一次华丽升级。 G方法的作用包括标记位置和区间统计两个功能,下面来看下具体用法: 标记位置G方法的第一个用法就是标记位置,例如: 表示把当前位置标记为begin标签,并且记录当前位置的执行时间,如果环境支持的话,还能记录内存占用情况。可以在任何位置调用G方法标记。运行时间统计标记位置后,我们就可以再次调用G方法进行区间统计了,例如: G('begin','end') 表示统计begin位置到end位置的执行时间(单位是秒),begin必须是一个已经标记过的位置,如果这个时候end位置还没被标记过,则会自动把当前位置标记为end标签,输出的结果类似于: 默认的统计精度是小数点后4位,如果觉得这个统计精度不够,还可以设置例如: 可能的输出会变成:
内存开销统计如果你的环境支持内存占用统计的话,还可以使用G方法进行区间内存开销统计(单位为kb),例如: 第三个参数使用m表示进行内存开销统计,输出的结果可能是: 同样,如果end标签没有被标记的话,会自动把当前位置先标记位end标签。如果环境不支持内存统计,则该参数无效,仍然会进行区间运行时间统计。 忘掉debug_start、debug_end吧,大道至简,你懂的~ U方法用于完成对URL地址的组装,特点在于可以自动根据当前的URL模式和设置生成对应的URL地址,格式为: U('地址','参数','伪静态','是否跳转','显示域名'); 在模板中使用U方法而不是固定写死URL地址的好处在于,一旦你的环境变化或者参数设置改变,你不需要更改模板中的任何代码。 在模板中的调用格式需要采用 {:U('地址', '参数'…)} 的方式 基本用法U方法的用法示例: 也可以支持分组调用: 当然,也可以只是写操作名,表示调用当前模块的 除了分组、模块和操作名之外,我们也可以传入一些参数: U方法的第二个参数支持传入参数,支持数组和字符串两种定义方式,如果只是字符串方式的参数可以在第一个参数中定义,下面几种方式都是等效的: 但是不允许使用下面的定义方式来传参数: 根据项目的不同URL设置,同样的U方法调用可以智能地对应产生不同的URL地址效果,例如针对: 这个定义为例。如果当前URL设置为普通模式的话,最后生成的URL地址是: 如果当前URL设置为PATHINFO模式的话,同样的方法最后生成的URL地址是: 如果当前URL设置为REWRITE模式的话,同样的方法最后生成的URL地址是: 如果你同时还设置了PATHINFO分隔符的话: 就会生成 如果当前URL设置为REWRITE模式,并且设置了伪静态后缀为html的话,同样的方法最后生成的URL地址是: 如果设置了多个伪静态支持,那么会自动取第一个伪静态后缀添加到URL地址后面,当然你也可以手动在U方法里面指定要生成的伪静态后缀,例如: 就会生成
路由支持U方法还可以支持路由,如果我们定义了一个路由规则为: 那么可以使用 最终生成的URL地址是:
域名支持如果你的应用涉及到多个子域名的操作地址,那么也可以在U方法里面指定需要生成地址的域名,例如: @后面传入需要指定的域名即可。此外,U方法的第5个参数如果设置为true,表示自动识别当前的域名,并且会自动根据子域名部署设置APP_SUB_DOMAIN_DEPLOY和APP_SUB_DOMAIN_RULES自动匹配生成当前地址的子域名。 如果开启了URL_CASE_INSENSITIVE,则会统一生成小写的URL地址。 锚点支持3.1.2版本开始,U方法还可以支持生成URL地址中的锚点,例如: 就会生成 如果域名和锚点同时使用的话,注意顺序为先锚点后域名,例如:1.U('Blog/read#comment@blog','id=1'); ThinkPHP的I方法是3.1.3版本新增的,如果你是之前的3.*版本的话,可以直接参考使用3.1快速入门教程系列的变量部分。 概述正如你所见到的一样,I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:I('变量类型.变量名',['默认值'],['过滤方法']) 变量类型是指请求方式或者输入类型,包括:
变量名则严格区分大小写。 默认值和过滤方法均属于可选参数。 用法我们以GET变量类型为例,说明下I方法的使用: 支持默认值: 采用方法过滤: 支持直接获取整个变量类型,例如: 用同样的方式,我们可以获取post或者其他输入类型的变量,例如: param变量类型是框架特有的支持自动判断当前请求类型的变量获取方式,例如: 如果当前请求类型是GET,那么等效于 $_GET['id'],如果当前请求类型是POST或者PUT,那么相当于获取 $_POST['id'] 或者 PUT参数id。并且param类型变量还可以用数字索引的方式获取URL参数(必须是PATHINFO模式参数有效,无论是GET还是POST方式都有效),例如: 当前访问URL地址是 那么我们可以通过 事实上,param变量类型的写法可以简化为:
变量过滤使用I方法的时候 变量其实经过了两道过滤,首先是全局的过滤,全局过滤是通过配置VAR_FILTERS参数,这里一定要注意,3.1版本之后,VAR_FILTERS参数的过滤机制已经更改为采用array_walk_recursive方法递归过滤了,主要对过滤方法的要求是必须引用返回,所以这里设置htmlspecialchars是无效的,你可以自定义一个方法,例如: 然后配置: 如果需要进行多次过滤,可以用: filter_exp方法是框架内置的安全过滤方法,用于防止利用模型的EXP功能进行注入攻击。因为VAR_FILTERS参数设置的是全局过滤机制,而且采用的是递归过滤,对效率有所影响,所以,我们更建议直接对获取变量过滤的方式,除了在I方法的第三个参数设置过滤方法外,还可以采用配置DEFAULT_FILTER参数的方式设置过滤,事实上,该参数的默认设置是: 也就说,I方法的所有获取变量都会进行htmlspecialchars过滤,那么: 同样,该参数也可以支持多个过滤,例如:
如果我们在使用I方法的时候 指定了过滤方法,那么就会忽略DEFAULT_FILTER的设置,例如: I方法的第三个参数如果传入函数名,则表示调用该函数对变量进行过滤并返回(在变量是数组的情况下自动使用array_map进行过滤处理),否则会调用PHP内置的filter_var方法进行过滤处理,例如: 表示 会对$_POST['email'] 进行 格式验证,如果不符合要求的话,返回空字符串。(关于更多的验证格式,可以参考 官方手册的filter_var用法。) 或者可以用下面的字符标识方式: 可以支持的过滤名称必须是filter_list方法中的有效值(不同的服务器环境可能有所不同),可能支持的包括: 在有些特殊的情况下,我们不希望进行任何过滤,即使DEFAULT_FILTER已经有所设置,可以使用: 一旦过滤参数设置为NULL,即表示不再进行任何的过滤。
cache方法是3.0版本开始新增的缓存管理方法。 注意:3.1.2版本后因cache方法并入原S方法,所以cache方法不再建议使用,用S方法即可。
缓存初始化cache方法传入数组即表示进行缓存初始化,例如: 支持的配置参数根据不同的缓存方式(由type参数设置),通用的缓存参数包括:
缓存初始化操作后返回的是一个缓存实例化对象。 如果你没有进行缓存初始化的话,cache方法会在你进行缓存操作之前自动初始化(用系统默认的缓存方式和缓存参数),默认缓存配置参数包括: 这些具体的缓存参数的用法,我们以后会在快速入门:缓存中详细描述。缓存设置缓存初始化之后,就可以进行缓存操作了, 会使用当前配置的缓存方式用name标识来缓存value值。可以单独设置该缓存数据的有效期,例如: 缓存数据一个小时。为了保证缓存的安全,建议对返回值做出判断,如果缓存设置失败,则返回false,否则返回true。 3.1.2版本开始也可以直接在设置缓存的同时传入缓存设置参数,例如:
获取缓存 如果缓存标识不存在或者已经过期,则返回false,否则返回缓存值。删除缓存 删除缓存标识为name的缓存数据。如果要切换缓存方式,可以再次进行缓存初始化操作。 或者使用下面的方式: 如果你设置了缓存前缀的话,对应的缓存操作只是对应该缓存前缀标识的,不会影响其他的缓存。
我们已经了解了ThinkPHP中的S方法的用法,F方法其实是S方法的一个子集功能,仅用于简单数据缓存,并且只能支持文件形式,不支持缓存有效期,因为采用的是PHP返回方式,所以其效率较S方法较高,因此我们也称之为快速缓存方法。 F方法的特点是: 简单数据缓存; 文件形式保存; 采用PHP返回数据方式加载缓存; 支持子目录缓存以及自动创建; 支持删除缓存和批量删除; 写入和读取缓存 默认的保存起始路径是DATA_PATH(该常量在默认配置位于RUNTIME_PATH.'Data/'下面),也就是说会生成文件名为DATA_PATH.'data.php'的缓存文件。注意:确保你的缓存标识的唯一,避免数据覆盖和冲突。 下次读取缓存数据的时候,使用: 我们可以采用子目录方式保存,例如: 就会生成DATA_PATH.'user/data.php' 缓存文件,如果user子目录不存在的话,则会自动创建,也可以支持多级子目录,例如: 如果需要指定缓存的起始目录,可以用下面的方式: 获取的时候则需要使用:
删除缓存删除缓存也很简单,使用: 第二个参数传入NULL,则表示删除标识为data的数据缓存。支持批量删除功能,尤其是针对子目录缓存的情况,假设我们要删除user子目录下面的所有缓存数据,可以使用: 又或者使用过滤条件删除,例如:
|
|
来自: Be_The_Change > 《单字母函数》