2011-03-10 45 views
1

我可能可以作爲一個PHP開發人員傳遞,但我只是不「獲取」面向對象的一面,現在是時候將它整理出來。幫我「搞定」面向對象的PHP

在代碼片段中,我寫了一些代碼來從mongoDB中獲取一些信息。我意識到我在那裏使用了一些類,但是我沒有構建任何類 - 它們就是MongoDB驅動程序提供的。 在foreach循環中,我有一些從MongoDB打印出來的變量。我想使這個foreach循環類,以便我可以打電話這樣的:

print->Environment 
print->Architecture 

這使得它很好,乾淨和簡單。我想,如果有人能夠幫助我從我已經寫過的東西創建一個班級,可能會幫助我「獲得」班級和對象。感謝所有的幫助。

考慮以下幾點:

$gethost=$_GET['q']; 
try { 
    // open connection to MongoDB server 
    $conn = new Mongo('localhost'); 

    // access database 
    $db = $conn->factdb; 

    //authenticate 
    $db->authenticate('username','password'); 

    // access collection 
    $collection = $db->hosts; 

    // define what to find 
    $host = array(
     'host' => $gethost 
); 
    // disconnect from server 
    $conn->close(); 
} catch (MongoConnectionException $e) { 
    die('Error connecting to MongoDB server'); 
} catch (MongoException $e) { 
    die('Error: ' . $e->getMessage()); 
} 

$cursor = $collection->find($host); 
    foreach ($cursor as $value) { 
      echo '<tr><td><b>Environment</b></td><td>'.$value['facter']['environment']['value'].'</td><td>'.date("M j Y",$value['facter']['environment']['created_at']).'</td><td>'.date("M j Y",$value['facter']['environment']['updated_at']).'</td></tr>'; 
    echo '<tr><td><b>FQDN</b></td><td>'.$value['facter']['fqdn']['value'].'</td><td>'.date("M j Y",$value['facter']['fqdn']['created_at']).'</td><td>'.date("M j Y",$value['facter']['fqdn']['updated_at']).'</td></tr>'; 
    echo '<tr><td><b>Model</b></td><td>'.$value['allocations']['model']['value'].'</td><td>'.date("M j Y",$value['allocations']['model']['created_at']).'</td><td>'.date("M j Y",$value['allocations']['model']['updated_at']).'</td></tr>'; 
} 
+1

您的代碼是基於對象的編程。實際的OOP編程涉及從頭開始創建全新的對象,或者擴展/繼承其他對象。 –

回答

4

在我看來,你有OOP的絕對沒有知識(除了使用->訪問屬性)。別擔心,基礎知識並不難學。您應該從The PHP Manual的OOP章節開始。

祝你好運,
阿林

+2

基礎知識:http://www.php.net/manual/en/language.oop5.basic.php – MattB

+0

@MattB如果你想跳過內容和介紹:)。懶惰的讀者。 –

+0

我通過參加Java課程的介紹瞭解了OOP的基礎知識。在那之後,PHP中的面向對象編程很有意義,特別是在使用CodeIgniter處理幾個網站應用程序之後。 –

0

首先,你可能會想

$Environment->print() 
$Architecture->print() 

print->Environment 
print->Architecture 

其次,除非我們知道更多關於環境與建築的數據以及它是如何使用我們將無法爲您創建可用的課程。通過查看對象和類是如何實現的,你將不會「得到」OOP,你應該瞭解封裝,繼承,抽象等等。然後擔心實現。

+0

謝謝,但我需要從某個地方開始,課程和對象是一個開始的地方。一旦我掌握了基本知識,我就會擔心繼承等問題。 – jaxxstorm

+0

此外,我希望print-> Architecture從foreach循環中取出一個由 $ value ['facter'] ['environment'] ['value']定義的變量,並在​​標籤內打印出來。 $ value由 定義$ cursor = $ collection-> find($ host);我想要一個「打印」(或環境)類,其中的函數獲取數組的值$ value ['factor'] ['environment'] ['$'['$'])值'](在必要時用數組值替換環境 – jaxxstorm

+0

@Frap在使用對象時絕對沒有點**,如果你不使用OOP的任何基本概念。堅持功能編程,直到你理解爲什麼*你需要對象,首先從閱讀維基百科上的oop開始,然後當你理解你將從使用對象中得到什麼好處時,你可以開始探索實現它們的方式。 *不應該**使用對象來實現。 – Ivan