2010-08-05 56 views
0

我是以舊的方式編程 - 仍然使用函數而不是類。例如,一些基本的東西創造了一個網站的基本模板時,我要做的就是把頁眉和頁腳的功能,像這樣在一個名爲functions.php的什麼是php5類的方法呢?

<?php 
//header 
function outline_start() { 

echo ' 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" dir="ltr" lang="en-US"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>my site</title> 
</head> 
<body> 
'; 

} 

//footer 
function outline_end() { 
echo ' 
</body></html> 
'; 

} 
?> 

然後在另一個文件中的文件,就像我的index.php倒是做到以下幾點:

<?php 

include(functions.php); 

outline_start(); 

echo 'hello world'; 

outline_end(); 

?> 

這可以明智帶來的安全問題與需要使用全局變量有人告訴我,通常是不好的做法 - 對嗎?

最佳做法是什麼?

+6

學習oop。你的生活會感謝你。 – Stephen 2010-08-05 00:52:48

回答

2

最佳做法可以由您正在使用的團隊最好地確定。我看到它的方式,你有兩種選擇之一:

你可以將你的函數加入一種「帶這​​些前綴的函數用於這些操作」的前綴。這與PHP已經做了一段時間類似,即db_connect()和db_query()。但是真的,這與你已經有的(outline_start()和outline_end())非常相似。

如果你想在一個類來封裝這一點,您可以:

class Outline { 
    function Start() { 
    //Code to echo here. Or, if you prefer, return the string. 
    } 

    function End() { 
    //Code to echo here. Or, if you prefer, return the string. 
    } 
} 

然而,大多數人會建議你使用視圖引擎的做法,或者最起碼,你的頁眉和頁腳的php_include 。人們普遍接受的是,盡你所能將HTML代碼保留在您的PHP代碼之外。如果你遇到這種情況,它可以讓你在後期輕鬆使用CSS,樣式和JS。因此,如果您的PHP函數的目的僅僅是返回靜態HTML,只需將其粘貼到另一個文件中,而不用擔心嘗試使用PHP5。

+0

我看,像include(header.php)。而是使用類的實際數據庫相關的東西和過程? – willdanceforfun 2010-08-05 01:39:25

+0

這就是我通常所做的,KeenLearner。你的PHP正在做邏輯相關的東西,而不是隻返回HTML的想法。 – villecoder 2010-08-05 21:16:37

1

您的標題提到'類',所以我猜你有興趣將OOP(面向對象的編程)概念與基於功能的'模板'進行比較。

如果沒有對OOP的基本理解,比較兩者可能不那麼容易。假設你有基礎,一個基於對象的模板系統將有一個處理輸出模板的'視圖'對象。將會有方法用於分配變量,甚至分配模板本身。

<?php 
//make the template variable name contain the value 'John' 
$view->assign('name', 'John'); 

//make color contain the value of $color 
$view->assign('color', $color); 

//use the 'user' template 
$view->setScript('user'); 

//display the template 
$view->render(); 
?> 

現在模板本身可能會使用某種特殊的模板語言(如Smarty)或者只是使用本機PHP(如Zend_View)。它應該允許包含子模板,或者通過將子模板的輸出分配給主模板(比如它只是另一個模板變量),允許模板包含其他模板,或者使用某種主佈局來包含不同的內容部分。

當涉及到它時,大多數OOP模板實現將'包含'通用部分,這可能被認爲與您現在使用的方法類似。但是,主要區別在於OOP技術將(或應該)傾向於將您的表示層(HTML)與其他所有代碼混合在一起。

但是,有很多不同的OOP模板引擎 - 看看他們中的一些,看看他們提供什麼。您可能還想看看mVC(模型 - 視圖 - 控制器)設計模式。