2014-12-04 73 views
0

我在Procedural php 5年,最近我決定硬着頭皮,進展到OOP。 現在我triyng創建一個基本的UI類來管理一個負責任的管理模板 此類網格 我希望能夠做到這一點如何創建一個類正確的方式

$grid = new Grid(); 
// a span is an area the father and the widget is the son, so spans have widgets inside. 

// a span a width of 6 
$span1 = $grid->span("6"); 

// a new widget inside span1 
$span1->widget("icon", "title1", "content1"); 
// another new widget inside span1 
$span1->widget("icon", "title2", "content2"); 

// a span a width of 4 
$span2 = $grid->span("4"); 

// a new widget inside span2 
$span2->widget("icon", "title1", "content1"); 
// another new widget inside span2 
$span2->widget("icon", "title2", "content2"); 

// echo /return results 
$grid->render(); 

這是我到目前爲止,但我不知道如何過關。

class Grid{ 
    private $content; 
    private $innerContent; 
    private $spanResult; 
    private $widgetResult; 

    function span($size){ 
     $this->size = $size; 
     $output = '<div class="span' . $size . '">'; 
      $output .= $this->innerContent; 
     $output .= '</div>'; 

     $this->spanResult .= $output; 
    } 

    function widget($icon, $title, $content){ 
     $output = '<div class="widget widget-nopad">'; 
      $output .= '<div class="widget-header"> <i class="icon-' . $icon . '"></i>'; 
       $output .= '<h3>' . $title . '</h3>'; 
      $output .= '</div>'; 
      $output .= '<div class="widget-content">'; 
       $output .= $content; 
      $output .= '</div>'; 
     $output .= '</div>'; 

     $this->widgetResult = $output; 
    } 

    function render(){ 

    } 
} 

謝謝。

+1

這應該是在代碼審查 – 2014-12-04 21:13:19

+0

我在那裏發佈,剛剛在那裏,沒有多少人在那裏。 – 2014-12-04 21:17:33

+1

這個問題似乎是脫離主題,因爲它是關於[代碼評論](http://codereview.stackexchange.com) – sjagr 2014-12-04 21:39:37

回答

3

看起來,對於初學者來說,你的span()方法不會返回一個對象。您需要在span()方法內創建一個span對象並將其返回。 span對象應該有widget()方法,而widget()方法只應該給span對象分配數據。所有跨度對象在創建時都應存儲在您創建的網格對象中以供參考。然後,$ grid-> render()方法應該迭代$ span對象並適當地輸出它們。

編輯:下面是我在想什麼的基本用法示例。我避免使用網格,而是希望你閱讀這個例子,看看它做了什麼。

<?php 
// Table class to manage the table object 
class Table 
{ 
    // Init the row collection 
    private $rows; 

    // Function to create a row and save it in the table object. 
    function row() 
    { 
     // Create a row object. 
     $row = new Row; 

     // Save this row object in this table object. 
     $this->rows[] = $row; 

     // Return the row object for method chaining 
     return $row; 
    } 

    // Function to render the table. 
    function render() 
    { 
     // For each row in this table object... 
     foreach($this->rows as $row) 
     { 
      // Var dump for temporary output! 
      var_dump($row->getData()); 
     } 
    } 
} 

// Create a row class to manage the row object 
class Row 
{ 
    // Init the data array to store this row's content. 
    private $data; 

    // Function to add a string to the data array of this particular row object. 
    function addData($string) 
    { 
     // Append string to this row's data 
     $this->data[] = $string; 
    } 

    // Basic function to return data specific to this row's object 
    function getData() 
    { 
     // Return this row's data! 
     return $this->data; 
    } 
} 

// Create the table object 
$table = new Table; 

// Create your first row by using the table object and it's row method. 
// This will create the row object but also save it's reference within the table object. 
// Once we have the row object, use it's addData method to add a string. 
$row = $table->row(); 
$row->addData('Row One Data'); 

// Same as row one but with different data. 
$row2 = $table->row(); 
$row2->addData('Row Two Data'); 

// Render this table object! 
$table->render(); 
?> 

這將輸出:

array(1) { [0]=> string(12) "Row One Data" } array(1) { [0]=> string(12) "Row Two Data" } 

作爲一個方面說明,我目前與A·B的答案不同意。我相信這不應該建立在靜態方法的基礎上。我會繼續你正在做的事情,因爲你將來可以使用任何數據定製網格(或在同一頁面上輸出多個不同的網格)。不過,我願意向其他人說服我。我在這裏的思考過程是我們正在嘗試做類似於Magento's Grid.

+0

我相信這是有意義的任何人在oop社區,但不是我。 你能給我舉個例子嗎? – 2014-12-04 21:25:33

+0

已更新的答案,讓我知道您的想法以及是否需要更多幫助。 – 2014-12-04 21:38:12

+0

再次更新,這次有了一些簡短的解釋。 – 2014-12-04 21:47:05

相關問題