A函数: 用于实例化Action 格式A($name,$layer='',$common=false)
/**
* A函数用于实例化Action 格式:[项目://][分组/]模块
* @param string $name Action资源地址
* @param string $layer 控制层名称
* @param boolean $common 是否公共目录
* @return Action|false
*/
A($name,$layer='',$common=false)
应用例子:
//使用A函数
$index=A("Index");//实例化IndexAction
echo $index->myHello();//调用myHello()方法
//等价于下面的方法
$index=new IndexAction();
echo $index->myHello();
B函数: 执行某个行为就是在项目开始之前,执行这个行为定义的所有函数,支持2个参数,第二个参数支持需要接受一个数组 格式B($name, &$params=NULL)
/**
* 执行某个行为
* @param string $name 行为名称
* @param Mixed $params 传入的参数
* @return void
*/
B($name, &$params=NULL)
应用例子:
B('app_begin',array("name"=>"tdweb","time"=>time()));
C函数: 获取和设置配置参数 支持批量定义 格式C($name=null, $value=null)
/**
* 获取和设置配置参数 支持批量定义
* @param string|array $name 配置变量
* @param mixed $value 配置值
* @return mixed
*/
C($name=null, $value=null)
应用例子:
获取值:
获取所有设置:C(); 不传递任何参数,返回一个包含所有设置的数组。
获取指定配置:C('URL_MODEL') 这样就能得到URL_MODEL的配置信息
获取指定二维数组配置:C("array.name"),这样就返回数组array下的key为name所对应的值
设置值:
为二维数组赋值C("array.name","value"),原理同上(获取array.name的值),后边的value是值
批量赋值:
$test=array("URL_MODEL"=>1,"THIN_MODEL"=>true");
C($test);
这样直接将数组里的值赋值了
判断是否赋值:
C("?URL_MODEL")这样前边加个"?",如果已经赋值,则返回true
需要说明的是,这里虽然更改了配置的值,但是仅仅是这个页面做了更改,到下个页面就不起作用了,如果想改就永久更改,那么需要配合F函数,将配置文件写入config.php才行。
/**
* D函数用于实例化Model 格式 项目://分组/模块
* @param string $name Model资源地址
* @param string $layer 业务层名称
* @return Model
*/
D($name='',$layer='')
应用例子:
D函数有2个优点,一是如果之前实例化过这个Model,那么就不再实例化了,节省资源;二是方便调试,如果不存在 这个Model,会抛出TP异常,非常人性化。
如果访问本项目的Model直接D("Model名称");就可以了,如果打算跨项目访问,就使用 D("Model名称","项目名称")。
$user2=D('User');//与下一行代码等价
$user=new \Test\Model\UserModel();
E:抛出异常处理
/**
* 抛出异常处理
* @param string $msg 异常消息
* @param integer $code 异常代码 默认为0
* @return void
*/
E($msg, $code=0)
F函数: 快速文件数据读取和保存 针对简单类型数据 字符串、数组 格式F($name, $value='', $path=DATA_PATH)
/**
* 快速文件数据读取和保存 针对简单类型数据 字符串、数组
* @param string $name 缓存名称
* @param mixed $value 缓存值
* @param string $path 缓存路径
* @return mixed
*/
F($name, $value='', $path=DATA_PATH)
应用例子:
快速保存数据:F("mydata","这里是要保存的数据"),这样就在项目Data目录下保存了一个名叫mydata.php的文件,里边的内容是该函数的第二个参数。
指定保存时间 :F("mydata","这里是要保存的数据","60"),这样,如果下次再访问,间隔大于60秒则删除次缓存文件。
指定保存目录:F("mydata","这里是要保存的数据","60",DATA_PATH) ,这样就指定保存在data目录下
立即删除缓存:F("mydata",null),第二个参数传递一个null值,这样就删除了mydate这个缓存
读取缓存数据:F("mydata"),这样就读取这个缓存了
G函数: 记录和统计时间(微秒)和内存使用情况 格式G($start,$end='',$dec=4)
/**
* 记录和统计时间(微秒)和内存使用情况
* 使用方法:
* <code>
* G('begin'); // 记录开始标记位
* // ... 区间运行代码
* G('end'); // 记录结束标签位
* echo G('begin','end',6); // 统计区间运行时间 精确到小数后6位
* echo G('begin','end','m'); // 统计区间内存使用情况
* 如果end标记位没有定义,则会自动以当前作为标记位
* 其中统计内存使用需要 MEMORY_LIMIT_ON 常量为true才有效
* </code>
* @param string $start 开始标签
* @param string $end 结束标签
* @param integer|string $dec 小数位或者m
* @return mixed
*/
G($start,$end='',$dec=4)
标记位置
G方法的第一个用法就是标记位置G('begin');
运行时间统计
标记位置后,我们就可以再次调用G方法进行区间统计了,如果这个时候end位置还没被标记过,则会自动把当前位置标记为end标签
G('begin');
// ...其他代码段
print_r(U("/UserController"));
G('end');
// ...也许这里还有其他代码
// 进行统计区间
echo G('begin','end').'s';exit();//最后一位是小数点的位数,可根据需要修改,默认四位,单位是S
内存开销统计
如果你的环境支持内存占用统计的话,还可以使用G方法进行区间内存开销统计(单位为kb),第三个参数使用m表示进行内存开销统计。例如:echo G('begin','end','m').'kb';如果环境不支持内存统计,则该参数无效,仍然会进行区间运行时间统计。
I函数: 获取输入参数 支持过滤和默认值 格式I($name,$default='',$filter=null)
/**
* 获取输入参数 支持过滤和默认值
* 使用方法:
* <code>
* I('id',0); 获取id参数 自动判断get或者post
* I('post.name','','htmlspecialchars'); 获取$_POST['name']
* I('get.'); 获取$_GET
* </code>
* @param string $name 变量的名称 支持指定类型
* @param mixed $default 不存在的时候默认值
* @param mixed $filter 参数过滤方法
* @return mixed
*/
I($name,$default='',$filter=null)
正如你所见到的一样,I方法是ThinkPHP众多单字母函数中的新成员,其命名来自于英文Input(输入),主要用于更加方便和安全的获取系统输入变量,可以用于任何地方,用法格式如下:I('变量类型.变量名',['默认值'],['过滤方法'])。变量类型是指请求方式或者输入类型,包括:
变量类型 | 含义 |
get | 获取GET参数 |
post | 获取POST参数 |
param | 自动判断请求类型获取GET、POST或者PUT参数 |
request | 获取REQUEST 参数 |
put | 获取PUT 参数 |
session | 获取 $_SESSION 参数 |
cookie | 获取 $_COOKIE 参数 |
server | 获取 $_SERVER 参数 |
globals | 获取 $GLOBALS参数 |
变量名则严格区分大小写。
默认值和过滤方法均属于可选参数。
echo I('get.id'); // 相当于 $_GET['id']
echo I('get.name'); // 相当于 $_GET['name']
I('get.'); // 获取整个$_GET 数组
L函数: 获取和设置语言定义(不区分大小写) 格式L($name=null, $value=null)支持批量设置,不区分大小写
/**
* 获取和设置语言定义(不区分大小写)
* @param string|array $name 语言变量
* @param string $value 语言值
* @return mixed
*/
L($name=null, $value=null)
M函数: 用于实例化一个没有模型文件的Model 格式M($name='', $tablePrefix='',$connection='')。是常用的字母函数
/**
* M函数用于实例化一个没有模型文件的Model
* @param string $name Model名称 支持指定基础模型 例如 MongoModel:User
* @param string $tablePrefix 表前缀
* @param mixed $connection 数据库连接信息
* @return Model
*/
M($name='', $tablePrefix='',$connection='')
应用例子:
1、实例化基础模型(Model) 类
在没有定义任何模型的时候,我们可以使用下面的方法实例化一个模型类来进行操作,这种方法最简单高效,因为不需要定义任何的模型类,所以支持跨项目调用。缺点也是因为没有自定义的模型类,因此无法写入相关的业务逻辑,只能完成基本的CURD操作。
//实例化User模型
$User = M('User');
//执行其他的数据操作
$User->select();
//等效于
$User = new Model('User');
2、实例化其他公共模型类
第一种方式实例化因为没有模型类的定义,因此很难封装一些额外的逻辑方法,不过大多数情况下,也许只是需要扩展一些通用的逻辑,那么就可以尝试下面一种方法。因为系统的模型类都能够自动加载,因此我们不需要在实例化之前手动进行类库导入操作。模型类CommonModel必须继承Model。我们可以在CommonModel类里面定义一些通用的逻辑方法,就可以省去为每个数据表定义具体的模型类,如果你的项目已经有超过100个数据表了,而大多数情况都是一些基本的CURD操作的话,只是个别模型有一些复杂的业务逻辑需要封装,那么第一种方式和第二种方式的结合是一个不错的选择。
$User = M('CommonModel:User');
//该用法其实等效于:
$User = new CommonModel('User');
3、传入表前缀、数据库和其他信息
M方法有三个参数,第一个参数是模型名称(可以包括基础模型类和数据库),第二个参数用于设置数据表的前缀(留空则取当前项目配置的表前缀),第三个参数用于设置当前使用的数据库连接信息(留空则取当前项目配置的数据库连接信息)。如果你操作的数据库需要不同的用户账号,可以传入数据库的连接信息,例如:
$User = M('User','think_','mysql://user_a:1234@localhost:3306/thinkphp');
N函数: 设置和获取统计数据 格式N($key, $step=0,$save=false)
/**
* 设置和获取统计数据
* 使用方法:
* <code>
* N('db',1); // 记录数据库操作次数
* N('read',1); // 记录读取次数
* echo N('db'); // 获取当前页面数据库的所有操作次数
* echo N('read'); // 获取当前页面读取次数
* </code>
* @param string $key 标识位置
* @param integer $step 步进值
* @return mixed
*/
N($key, $step=0,$save=false)
应用例子:
如果你希望计数器每次增加5,那么可以改变步进值,例如:
N('read',5);
需要注意的是,N方法页面执行完毕后的统计结果不会带入下次统计。
R函数: 远程调用模块的操作方法 格式R($url,$vars=array(),$layer='')。R函数是比A函数更简便的方法
/**
* 远程调用模块的操作方法 URL 参数格式 [项目://][分组/]模块/操作
* @param string $url 调用地址
* @param string|array $vars 调用参数 支持字符串和数组
* @param string $layer 要调用的控制层名称
* @return mixed
*/
R($url,$vars=array(),$layer='')
使用例子:
$index=R("Index","myHello");
echo $index;
//等价于
$index=A("Index");
echo $index->myHello();
S函数: 缓存管理 格式S($name,$value='',$options=null)
/**
* 缓存管理
* @param mixed $name 缓存名称,如果为数组表示进行缓存设置
* @param mixed $value 缓存值
* @param mixed $options 缓存参数
* @return mixed
*/
S($name,$value='',$options=null)
S函数是全局缓存读写函数,和C类似,不过是直接写成文件的哦,写在Temp目录下,不过在缓存有一点需要注意,如果缓存名称是aaa,那么缓存生成的文件名称就是md5("aaa")的值,值得注意。
T函数: 获取模版文件 格式T($template='',$layer='')
/**
* 获取模版文件 格式 项目://分组@主题/模块/操作
* @param string $name 模版资源地址
* @param string $layer 视图层(目录)名称
* @return string
*/
T($template='',$layer='')
U函数: URL组装 支持不同URL模式 格式U($url='',$vars='',$suffix=true,$redirect=false,$domain=false)U函数是很强大的一个函数,它主要是进行URL组装,同时支持不同模式和路由
/**
* URL组装 支持不同URL模式
* @param string $url URL表达式,格式:'[分组/模块/操作#锚点@域名]?参数1=值1&参数2=值2...'
* @param string|array $vars 传入的参数,支持数组和字符串
* @param string $suffix 伪静态后缀,默认为true表示获取配置值
* @param boolean $redirect 是否跳转,如果设置为true则表示跳转到该URL地址
* @param boolean $domain 是否显示域名
* @return string
*/
U($url='',$vars='',$suffix=true,$redirect=false,$domain=false)
应用例子:
取得当前模块的Action地址 :U("/nowMethod");
取得当前模块的Action地址,并传递参数:U("/nowMethod?params=test");(如果不习惯上边那种方式,可以使用U("/nowMethod",array("params"=>"test");这样的数组方式传递参数,效果是一样的)
访问其他模块的方法:U("Other/otherMethod"),这样就是访问Other模块下的otherMethod方法
跨项目访问:U("appname://Other/otherMethod");
使用路由访问:U("appName://routeName@moduleName/actionName?params");
W函数: 渲染输出Widget 格式W($name, $data=array(), $return=false,$path='')
/**
* 渲染输出Widget
* @param string $name Widget名称
* @param array $data 传入的参数
* @param boolean $return 是否返回内容
* @param string $path Widget所在路径
* @return void
*/
W($name, $data=array(), $return=false,$path='')