#### 我們在開發中經常會用到很多的函數,有些是PHP內置的,有些需要自己去實現,為了減少代碼冗余,我就自己封裝了一些常用的函數,如下:
1. C()函數
可能ThinkPHP里最有標志性的就是它的這些大寫字母的函數了吧,C函數在系統配置類中已經寫過了,需要的請去前面的章節中查看
2. I()函數
~~~
function I($a){
$b = array_merge($_GET,$_POST);
return $b[$a];
}
~~~
這里只是簡單的把``$_GET和$_POST``合并后返回,如果需要的話也可以自己去添加過濾函數等等,這里為了方便,不再贅述
3.dump()函數
~~~
function dump($arr){
if (is_array($arr)){
echo '<pre>';
print_r($arr);
echo '</pre>';
}else{
echo $arr;
}
}
~~~
這個函數主要是因為調試的時候,到處``var_dump() print_r()``和``echo``,很亂,而且有時候因為參數類型的問題還會報錯,因為echo不能打印數組類型,所以會報錯,現在把他們都封裝起來,方便調試(pre標簽會保證把數組格式化輸出,而不會連在一起,不容易看清楚)
4.import()函數:
~~~
function import($str){
$path = C('extend_path') . $str;
if (file_exists($path)){
require $path;
return true;
}else{
throw new \S\S_Exception('您要導入的類文件不存在!');
}
}
~~~
這個函數用來引入第三方類庫,比如我在配置文件中添加配置項如下:`` 'extend_path' => S_PATH . 'S/Extend/',`` 那么我將Smarty類放在``Extend/``路徑下,這樣,我只需要使用``import('Smarty.class.php');``這樣就把Smarty類包含進來了,下面就可以進行實例化等操作了
5.session()函數
~~~
function session($parm1,$parm2 = null){
if (is_null($parm2)){
if (isset($_SESSION[$parm1])){
return $_SESSION[$parm1];
}else{
return false;
}
}else{
$_SESSION[$parm1] = $parm2;
return true;
}
}
~~~
這個函數是為了操控session的,session比cookies更加安全,廣泛用在驗證碼驗證上,前提是要使用``session_start()``開啟``session``
6.redirect()函數
~~~
function redirect($url, $time=0, $msg='') {
$url = __ROOT__.$url;
if (empty($msg)){
$msg = "系統將在{$time}秒之后自動跳轉到{$url}!";
}
if (!headers_sent()) {
// redirect
if (0 === $time) {
header('Location: ' . $url);
} else {
header('refresh:'.$time .';url=' . $url);
echo($msg);
}
exit();
} else {
$str = "<meta http-equiv=\'Refresh\' content=\'".$time .";URL=". $url . "\'>";
if ($time != 0)
$str .= $msg;
exit($str);
}
}
~~~
這個函數用與自動跳轉,跟TP中的``$this->redirect()``功能一樣,主要是通過設置``header()``達到跳轉的目的,代碼也很簡單
7.isAjax、isPost、isGet函數
~~~
function isAjax(){
if(isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
return true;
}else{
return false;
}
}
function isGet(){
return $_SERVER['REQUEST_METHOD'] == 'GET' ? true : false;
}
function isPost() {
return ($_SERVER['REQUEST_METHOD'] == 'POST' && (empty($_SERVER['HTTP_REFERER']) || preg_replace("~https?:\/\/([^\:\/]+).*~i", "\\1", $_SERVER['HTTP_REFERER']) == preg_replace("~([^\:]+).*~", "\\1", $_SERVER['HTTP_HOST']))) ? 1 : 0;
}
~~~
這三個函數是用來判斷當前提交的類型,代碼來源于網絡。
8.這個函數是重中之重:M()函數
~~~
function M($table_name,$dsn = null){
if (is_null($dsn)){
$obj = \S\Model::getInstance($table_name);
}
return $obj;
}
~~~
這個函數功能和TP中的M函數一樣,都是用于連接數據庫,這里面獲取了Model類的單例,穿件來的第一個參數是表名,第二個參數是使用PDO鏈接數據庫時的dsn,默認為空,在Model類中會從配置文件中調取dsn。
下一章就詳細講解數據庫操作類Model