#### 我们在开发中经常会用到很多的函数,有些是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