php常見面試(Smarty及相關知識)

來源:互聯網
上載者:User

標籤: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及相關知識)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.