標籤:sign nal 分析 isp 引用 模板 pre dir blog
1、Smarty簡介: 是一種php模板引擎,它分開了背景程式和前台頁面內容,使程式員和美工分工合作。還有其它模版引擎實現同樣的目的。
2、Smarty使用:
建立php檔案:
包含smarty類檔案 include(Smarty/Smarty.class.php);
執行個體化smarty對象 $smarty = new Smarty();
通過smarty對象定義模板檔案儲存位置(及其它屬性)
為模板定義變數 或為模板傳資料(一般是從資料庫中查詢的資料)
指定調用的html檔案即模板檔案
建立模板檔案:
在模板檔案中顯示資料
具體使用:
第一步、定義php檔案<?php//1、包含Smarty類檔案require("smarty/Smarty.class.php");//2、執行個體化Smarty類$smarty = new Smarty();//設定各個目錄的路徑,這裡是安裝的重點$smarty->template_dir ="./templates"; //模板存放位置$smarty->compile_dir ="smarty/templates/templates_c"; //編譯路徑$smarty->config_dir = "smarty/templates/config"; //設定檔存放位置configs$smarty->cache_dir ="smarty/templates/cache"; //緩衝目錄存放位置//smarty模板有快取的功能,如果這裡是true的話即開啟caching,但是 會造成網頁不立即更新的問題,當然也可以通過其他的辦法解決$smarty->caching = false;$smarty->left_delimiter = "{#"; //重新定義邊界,因為預設邊界“{}“符,在html 頁面中嵌入js指令檔編寫程式碼片段時使用的就是”{}“符,自訂邊界符還可以 是<{ }>, {/ /} 等$smarty->right_delimiter = "#}";$hello = "Hello World!";//賦值$smarty->assign("hello",$hello);//引用模板檔案 為模板傳值$smarty->display(‘index.tpl‘); //調用模板?>執行index.php就能看到Hello World!了
3、基本文法
1) 注釋
文法:{* 注釋內容 *}
2) assign()
註解:給模板進行變數賦值;
3) display()
註解:顯示模板;
4) fetch()
註解:獲得模板編譯輸出後的結果,類型為字串,等同於 echo display();
3、變數來的來源
1) PHP分配
2) 設定檔
① 引入設定檔
② 使用設定檔中變數
`注意:設定檔中(cfg.php)的寫法如下
擴充:smarty 中的檔案包含寫法:
3) 保留變數
4、變數調節器 lower
1) date_format
2) Default
註解:當變數是unset或者empty的字串時,預設值將顯示。
5、內建函數
1) config_load
註解:{config_load}用於從設定檔中 載入組態變數#variables#。
(參考demo如上配置)
2) foreach
註解:建議採用這種(smarty 3.0)寫法
3) include
註解:{include}用於載入其他模板到當前模板中
(參考demo如上配置)
4) if else if 手冊自己做
5) literal
註解:{literal}可以讓一個模板地區的字元原樣輸出。
6) php
重要說明
Smarty已經廢棄{php}標籤,強烈建議不要使用。
第九單元:設計模式
一、單例模式
1、概念瞭解
1) Q:什麼是單例模式?
A:單例模式一種設計模式,一個類只能執行個體化一個對象;
2、編寫單例類
1) 分析:為了防止在類外使用new關鍵字執行個體化對象,那麼首先new 是萬惡之源
問:該怎麼做能讓它執行個體化不成功?
答:類內部私人的構造方法。
2) 私人了構造方法,那麼如何才能是執行個體化一個對象呢?
答:關閉了一扇門,可以開啟一扇窗啊,開放一個公開的方法,用來執行個體化對象。
3) 若想每次得到的都是同一個對象,請思考該怎麼做?
答:私人靜態化成員一個成員屬性,用來儲存執行個體化後的對象,為了看出兩次執行個體化後的是兩個對象,在執行個體化對象時,加入了隨機數,代碼如下
註:instanceof 用來判斷對象是否屬於某個類。
通過列印,我們可以看出這兩對象中隨機數是一樣的,思考:此時我們的單例就完成了嗎?
2、截止到目前單例類完成了嗎?思考如下問題
4) Q:通過Single::getInstance 得到一個對象$obj1,複製一個$obj2,思考 $obj1和$obj2相同嗎?如果不同如何禁止這種複製行為?
A:不相同,私人化複製魔術方法可禁止複製。
5) 思考:如果子類繼承了該類,(建構函式被重寫)那麼又可以new對象了,
Q:請問這樣得到的對象是同一個的嗎?
A:同過new出來的,那肯定不是了。
Q:我們寫的單例類這麼一繼承就不靈了。那麼該如何解決呢?
A:final 關鍵詞修飾類方法,
Final知識總結:
① final 修飾符不能修飾類屬性,報如下錯誤:
② Final 修飾符修飾類,該類不能繼承;
③ Final修飾符修飾成員方法,成員方法可以被繼承,但不可以被重寫。
php常見面試(Smarty及相關知識)