2011-09-10 44 views
0

我正在圍繞課程打包自己低劣的想法。它正在通過查看其他人的代碼而苦苦掙扎,發現很難看出它與我自己的代碼之間的關係。我希望你可以幫我看看它是如何工作的,將我已經加入的兩個簡單函數轉化爲類,以便我可以看到一個可關聯的例子。如何使用OOP實現此功能?

一個簡單的幾個功能:

function make_url_friendly($string) { 

    $remove = array(',',' ','?','=','&','-','|'); 
    $replace = array('_','_','_','_','','_',''); 

    $string = strtolower(str_replace($remove,$replace,$string)); 
    return $string; 

} 

function save_page($url) { 

$sql = 'INSERT INTO pages 
     SET url="' . mysql_real_escape_string(make_url_friendly($url)) . '" '; 
mysql_query($sql); 

} 


save_page('/questions/ask'); 

可能是什麼接力相當於這樣的功能呢?

回答

0
class URLHandler{ 

    // Class variables 
    $url = ""; 

    // Constructors 
    public URLHandler($newurl) { // Old Style 
     $this->__construct($newurl); 
    } 

    public __construct($newurl) { // New Style 
     $this->setUrl($newurl); 
    } 

    private function make_url_friendly($string) { 
     $remove = array(',',' ','?','='); 
     $string = strtolower(str_replace($remove,"_",$string)); 
     return $string; 
    } 

    public function save_page() { 
     $sql = 'INSERT INTO pages 
     SET url="' . mysql_real_escape_string($this->url) . '" '; 
     mysql_query($sql); 

    } 

    public function getUrl(){ 
     return $this->url; 
    } 
    public function setUrl($newurl){ 
     $this->url = $this->make_url_friendly($newurl); 
    } 
}; 


//save_page('/questions/ask'); 
$somevar = new URLHandler("https://stackoverflow.com/questions/ask"); 
$somevar->save_page(); 

$somevar->setUrl("/answers/answer"); 
$somevar->save_page(); 

編輯:

由於SHEF在評論中指出的,你真的想類似功能的商品組合成自己的階級。例如,對數據庫執行某些操作的所有函數都會與處理形式錯誤檢查的函數不同。

因此,在你的榜樣make_url_friendly將是一個不同的類從save_page

+0

'__construct'(雙下劃線)。我認爲'save_page'應該在不同的類中,它是相關的頁面,所以它應該是'Page'類中的函數。 – Shef

+0

感謝修改'__construct',我同意'save_page'應該在不同的類中。在這種情況下,我決定和一個班級一起做直譯。我想我應該添加一個解釋。 –

+0

那麼,在'類'中的東西是爲了組織和訪問嗎?雖然我並不真正瞭解它上面回答的一些事情。我正在尋找類內部私有和公共函數的區別。 – willdanceforfun

2

沒有辦法做出這樣的一小段代碼OOP風格。

你可以在OOP語法中僞裝你的代碼,就像在其他答案中一樣,但是實際上不會有OOP。

make_url_friendly()函數可以作爲一個函數。

對於save_page()也可能是一些類的方法,但沒有人能說什麼可能是類作爲沒有人知道你的設置

+0

我明白了。感謝那個Col.我的設置通常是在一個functions.php文件中有一堆這樣的函數,我基本上在每個頁面上都包含這個文件。它似乎是做這項工作的,我並沒有真正遇到這個問題,我也不明白它的侷限性。我似乎可以在其他功能中使用函數來避免重複。不過,我想了解OOP,這樣我就能明白我錯過了什麼。 – willdanceforfun