2010-07-26 79 views
3

我一直在使用Codeigniter來構造一箇中等大小的應用程序的前端,並且遇到了一個問題 - 我認爲可能是 - PHP中的繼承。下面是我想要做的:Codeigniter和多重繼承

在遵循MVC架構的過程中,我發現我在模型中複製了很多代碼,並決定創建一個可以從其他模型繼承的通用模型。夠簡單。但是,現在,我遇到了常見Model類中定義的一些功能問題。

下面是我在做什麼草圖:

<?php 

/** 
* Common Model 
* 
*/ 
class DeviceModel extends Model { 

function DeviceModel() { 
    parent::Model();  
} 

public function getDeviceId($d) { // this is just example code. } 

public function getDeviceInfo($id) {  

    $selectStmt = "SELECT BLAH, BLAH2 FROM YADDAYADDA..."; 

    $query = $this->db->query($selectStmt, array($id)); 

    if ($query->num_rows() > 0) { 
     return $query->result(); 
    } 
    } 
} 

?> 

這裏是子類:

<?php 
require_once('devicemodel.php'); 
class ManageModel extends DeviceModel { 

    function ManageModel() { 
     parent::DeviceModel(); 
    } 
    function getDropDownList($parkId,$tableName,$userclass) { 
     $arrCmds = array(); 
     $arrHtml = array(); 

     $deviceInfo = parent::getDeviceInfo($parkId); 
     $did = parent::getDeviceId($deviceInfo); 

     foreach ($deviceInfo as $device) { 
      $cmds = $this->getDeviceCommands($device->dtype,$tableName,$userclass); 
      array_push($arrCmds,$cmds); 
     } 

     // 
     // **After the refactor, I am receiving Undefined Offsets for this loop.** 
     // 
     for ($i=0; $i<sizeof($arrCmds); $i++) { 
      $html = $this->generateHtml($arrCmds[$i],$did[$i]); 
      array_push($arrHtml,$html); 
     } 

     return $arrHtml; 
    }   

是否有笨使用多重繼承的問題嗎?我對PHP和codeigniter相當陌生。

感謝您的期待。

+1

我已經在codeigniter中完成了這樣的事情,它從來沒有引起任何問題。這可能是一個問題與getDeviceInfo的邏輯... 夫婦隨機創意的/我的約定調用getDeviceInfo爲$ this-> getDeviceInto而不是使用父ref,而不是使用array_push使用arrCmds [] = $ cmds; – 2010-07-26 18:06:51

回答

0

我看不到多繼承在那裏。

我也在使用codeigniter,我有需要繼承它的控制器,所以我的控制器都可以從我的而不是從CodeIgniter的直接下降。

CodeIgniter有自己的方法來擴展它自己的類。或者你可以在if (!defined ...)之後打開model.php文件(在system/libraries /中)和文件頂部,你可以添加你的ManageModel類的代碼

另外這裏有一個鏈接來擴展模型http://www.askaboutphp.com/50/codeigniter-extending-the-native-model-and-make-it-your-own.html

+0

「或者您可以打開model.php文件(在system/libraries /中)」您應該永遠不要修改應用程序文件夾以外的文件。 codeigniter的最大功能之一是能夠將應用程序文件夾拖放到較新版本的ci中(嘗試在symfony中升級,這很痛苦)。如果您在系統/庫中修改某些內容,那麼升級時可能會錯過一個錯誤。 – 2010-07-26 18:14:29

+0

我知道,如果您修改了文件,升級時可能會很麻煩,但這是創建自己的類的一種方法。另一個也是正確的做法,正如上面的答案中指出的那樣,它是本地擴展功能 – zz1433 2010-07-26 18:26:43