重慶分公司,新征程啟航
為企業提供網站建設、域名注冊、服務器等服務
為企業提供網站建設、域名注冊、服務器等服務
單例模式顧名思義,就是只有一個實例。作為對象的創建模式, 單例模式確保某一個類只有一個實例,而且自行實例化并向整個系統提供這個實例,這個類我們稱之為單例類。單例模式的要點有三個:一是某個類只能有一個實例;二是它必須自行創建這個實例;三是它必須自行向整個系統提供這個實例。下面我們討論下為什么要使用PHP單例模式?多數人都是從單例模式的字面上的意思來理解它的用途, 認為這是對系統資源的節省, 可以避免重復實例化, 是一種"計劃生育". 而PHP每次執行完頁面都是會從內存中清理掉所有的資源. 因而PHP中的單例實際每次運行都是需要重新實例化的, 這樣就失去了單例重復實例化的意義了. 單單從這個方面來說, PHP的單例的確有點讓各位失望. 但是單例僅僅只有這個功能和應用嗎? 答案是否定的,我們一起來看看。1. php的應用主要在于數據庫應用, 所以一個應用中會存在大量的數據庫操作, 在使用面向對象的方式開發時(廢話), 如果使用單例模式, 則可以避免大量的new 操作消耗的資源。2. 如果系統中需要有一個類來全局控制某些配置信息, 那么使用單例模式可以很方便的實現. 這個可以參看zend Framework的FrontController部分。3. 在一次頁面請求中, 便于進行調試, 因為所有的代碼(例如數據庫操作類db)都集中在一個類中, 我們可以在類中設置鉤子, 輸出日志,從而避免到處var_dump, echo。
成都創新互聯公司長期為1000+客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為建甌企業提供專業的成都網站設計、網站建設,建甌網站改版等技術服務。擁有十載豐富建站經驗和眾多成功案例,為您定制開發。
1. 嘗試設置一個頁面模板
1)拷貝一個index.php并改名為其它名,如list.php;
2)在list.php頁面最頂部添加
?php /*
Template Name: 友鏈
*/
?
以上兩步就可以創建一個頁面模板了,修改并保存好這個文件后,創建一個新頁面或者修改已存在的頁面。在右下邊有個“頁面模板”的面板,在下拉菜單中選中“友鏈”后保存就可以了。
然后在頁面中添加任何內容,包括html代碼就可以顯示了。可是我的需求是要自己完成PHP代碼獲取數據并展示,它不能這么做。
2. 調用 WordPress 的 API實現URL正確跳轉
這種方法的自由度較高,并且可以創建非WordPress格式的URL。比如我們要把 轉交給主題文件夾下的 /custom/list.php 來處理,就可以用這種方式來處理。這種方法用到 template redirect 鉤子,template redirect 是 WordPress 在預處理好所有參數設置之后決定調用主題模板的時候調用的。
在functions.php模板函數文件中添加以下實例代碼:
function loadCustomTemplate($template) {
global $wp_query;
if(!file_exists($template))return;
$wp_query-is_page = true;
$wp_query-is_single = false;
$wp_query-is_home = false;
$wp_query-comments = false;
// if we have a 404 status
if ($wp_query-is_404) {
// set status of 404 to false
unset($wp_query-query["error"]);
$wp_query-query_vars["error"]="";
$wp_query-is_404=false;
}
// change the header to 200 OK
header("HTTP/1.1 200 OK");
//load our template
include($template);
exit;
}
function templateRedirect() {
$basename = basename($_SERVER['REQUEST_URI'], '?' . $_SERVER['QUERY_STRING']);
loadCustomTemplate(TEMPLATEPATH.'/custom/'."/$basename.php");
}
add_action('template_redirect', 'templateRedirect');
這樣就實現了 WordPress 查找 /custom 文件夾下的 php 文件,并且將相匹配的 URL 請求轉交給對應的 php 文件來處理的效果,與此同時,這個 php 文件還保持了對 WordPress API 的調用,因此留給我們的空間非常大。
接下來就可以在 /custom 文件夾下自定義一個list.php文件然后通過鏈接訪問。
3. 添加頁面內容,獲取自定義數據庫/表中的內容
然后就可以根據需要自己需要來實現自己想要的功能,這里需要有以下幾點要處理:
1)如何操作數據庫
WordPress提供了一個全局變量$wpdb,并將其實例化為wpdb類的對象。這樣我們就可以直接使用$wpdb來調用所有的數據庫操作函數。通過這個$wpdb對象,我們可以對WordPress數據庫進行任何操作,包括建表、查詢、刪除、更新等。使用$wpdb-get_results實現執行sql語句操作數據庫,并獲取結果。
global $wpdb;
$sql= "SELECT * FROM ".$wpdb-prefix.table;
$a = $wpdb-get_results($sql);
2)使用wordpress的樣式
通過F12查看首頁代碼就可以發現只要使用對應的class樣式就能輕松讓頁面統一規整。那么就把對應的html添加到自定義PHP頁面中即可。
3)利用wordpress的規則輕松實現翻頁
wordpress已經默認支持翻頁,格式如:,只要在自定義的頁面里面定義好每頁返回正確的內容就好啦。
4. 設置nginx rewrite規則
可讀性強的URL一定不能是這樣的格式,對爬蟲也不友好,那就需要配置好rewrite規則,我使用的是nginx的配置為:
rewrite ^(.*)/indexed/page/([0-9]+)$ $1/indexed?page=$2 last;
到現在為止,離成功只有一步之遙了,那就是新建一個頁面, 大功告成!
$sql ="select * from db.pre order by num desc limit 0,10"
看了下 應該是這個意思
獲取num字段中的值按從大到下 或是從小到大排列
是靠這句order by num desc 如果順序是反的 把desc 改成 asc
而想10條10條的去拿 就相當于翻頁一樣
limit 0,10 這個地方 如果是簡單的只拿10個 那么就是 limit 10
而你是要拿N個10條 就只有 limit 0,10
而0是什么呢
sql數據起始標記是從0開始的
所以0是表里數據序列的起始位
limit 10,10這個就是從數據的第11行取10個
本文實例講述了php使用mysqli和pdo擴展,測試對比mysql數據庫的執行效率。分享給大家供大家參考,具體如下:
?php
/**
*
測試pdo和mysqli的執行效率
*/
header("Content-type:text/html;charset=utf-8");
//通過pdo鏈接數據庫
$pdo_startTime
=
microtime(true);
$pdo
=
new
PDO("mysql:host=localhost;dbname=test","root","1234",array(PDO::MYSQL_ATTR_INIT_COMMAND
=
"SET
NAMES'utf8';"));
for($i=1;$i=100;$i++){
$title
=
"pdo標題".$i;
$content
=
"pdo內容".$i;
$addtime
=
time();
$user_id
=
$i;
$pdo_sql
=
"INSERT
INTO
`article`(`title`,`content`,`addtime`,`user_id`)
VALUES(:title,:content,:addtime,:user_id)";
$sth
=
$pdo-prepare($pdo_sql);
$sth-bindParam(':title',$title);
$sth-bindParam(':content',$content);
$sth-bindParam(':addtime',$addtime);
$sth-bindParam(':user_id',$user_id);
$sth-execute();
}
$pdo_endTime
=
microtime(true);
$pdo_time
=
$pdo_endTime
-
$pdo_startTime;
echo
$pdo_time;
echo
"hr/";
//通過mysql鏈接數據庫
$mysqli_startTime
=
microtime(true);
$mysqli
=
mysqli_connect("localhost","root","1234","test")
or
die("數據連接失敗");
mysqli_query($mysqli,"set
names
utf8");
for($i=1;$i=100;$i++){
$title
=
"mysqli標題".$i;
$content
=
"mysqli內容".$i;
$addtime
=
time();
$user_id
=
$i;
$sql
=
"INSERT
INTO
`article`(`title`,`content`,`addtime`,`user_id`)
VALUES('".$title."','".$content."',".$addtime.",".$user_id.")";
mysqli_query($mysqli,$sql);
}
$mysqli_endTime
=
microtime(true);
$mysqli_time
=
$mysqli_endTime
-
$mysqli_startTime;
echo
$mysqli_time;
echo
"hr/";
if($pdo_time
$mysqli_time){
echo
"pdo的執行時間是mysqli的".round($pdo_time/$mysqli_time)."倍";
}else{
echo
"mysqli的執行時間是pdo的".round($mysqli_time/$pdo_time)."倍";
}
測試結果:其實經過多次測試,pdo和mysqli的執行效率差不多。
更多關于PHP相關內容感興趣的讀者可查看本站專題:《PHP基于pdo操作數據庫技巧總結》、《php+mysqli數據庫程序設計技巧總結》、《php面向對象程序設計入門教程》、《php字符串(string)用法總結》、《php+mysql數據庫操作入門教程》及《php常見數據庫操作技巧匯總》
希望本文所述對大家PHP程序設計有所幫助。
您可能感興趣的文章:php使用mysqli和pdo擴展,測試對比連接mysql數據庫的效率完整示例php中數據庫連接方式pdo和mysqli對比分析php中關于mysqli和mysql區別的一些知識點分析php操作mysqli(示例代碼)php封裝的mysqli類完整實例PHP以mysqli方式連接類完整代碼實例php簡單解析mysqli查詢結果的方法(2種方法)php中mysql連接方式PDO使用詳解Php中用PDO查詢Mysql來避免SQL注入風險的方法php
mysql
PDO
查詢操作的實例詳解PHP實現PDO的mysql數據庫操作類
-表示一個對象的成員(成員屬性 或 成員方法),符號前面說明是什么對象?符號后面說明是該對象的那一個成員?php中-符號沿用了c++中對象調用成員的方式,這里的$this其實是一個指針,指向了當前類的一個實例,所以也可以用-這里的db就是當前類的一個屬性也可以說是$this的一個屬性。這個db屬性又是一個對象所以又可以用-調用getAll方法.
另外還有一個操作符 :: 你應該見過 - 符號是對象的成員,那 :: 就是類的成員此符號名稱為域操作符。但要注意的是不是所有類成員都可以調用的,它要求調用的成員必須是公有且靜態的。。
本句的功能描述:
獲得當前對象$this的db(db是一個數據庫操作類的實例)通過調用這個操作類的getALL方法來執行$sql傳來的sql語句