2012-04-07 36 views
0

我希望能夠首先創建一個基類的新實例,然後從該基類內部我希望能夠創建一個子類的新實例。我也希望能夠從子類中調用基類方法。我用下面的代碼嘗試了它,它的工作原理是我想要的,但是這是一種不好的做法,它的內存效率如何?還有其他意見嗎?在Baseclass中創建一個子類的新實例

<?php 
class BaseClass { 
    private $subclass = NULL; 
    function __construct() { 
     print "In BaseClass constructor<br>"; 
     $this->subclass = new SubClass(); 
    } 
    function sayhello() { 
    print 'hello from base class'; 
    } 
} 

class SubClass extends BaseClass { 
    function __construct() { 
     print "In SubClass constructor<br>"; 
     $this->sayhello(); 
    } 

    function saygoodbye($num) { 
    print 'goodbye from base class'; 
    } 
} 

$SUB = new SubClass(); 
?> 

我這樣做的目的是爲了能夠通過使用$this->訪問的一切,像笨是如何工作的。這是我在我的私人API的index.php文件中。我希望能夠在調用call_user_func_array()之前驗證API請求。我還需要連接一個數據庫進行身份驗證,但我希望能夠從子類訪問數據庫。本質上,代碼會計算出正在調用的API方法,然後創建子類的實例並最終調用該方法。

$get_contents = $_GET; 

$resource_name = $get_contents['_resource']; 
unset($_GET['_resource']); 

$resource_method = $get_contents['_resource_method']; 
unset($_GET['_resource_method']); 

//Load the resource class 
include 'core/resources/' . $resource_name . '.php'; 

//If set to true, each method will require an API key to be used 
$auth_required = array(); 
$auth_required['collections']['addcollection'] = TRUE; 

if(isset($auth_required[$resource_name][$resource_method]) && $auth_required[$resource_name][$resource_method] == TRUE) { 
    print 'requires auth'; 
} 

//Create a new instance of the resource 
$API = new $resource_name(); 

$method_params = $_GET; 

call_user_func_array(array(&$API, $resource_method), $method_params); 
+0

你必須讓BaseClass具有子類實例的屬性的原因是什麼? – xdazz 2012-04-07 15:49:00

+0

你需要存儲在基類中的子類有什麼可能的原因?這是不好的做法,似乎沒有給你任何你不會有的東西。 – clexmond 2012-04-07 15:52:23

+0

這是我爲我的網站構建REST API的方式之一,但只會被我使用。最初我設置了創建子類​​的新實例,然後子類構造函數可以調用基類構造函數。然後調用子類方法,我使用了call_user_func_array()。我試圖使用API​​密鑰來實現簡單的身份驗證,該密鑰只​​是檢查它是否存在於數據庫中。基本上,子類包含所有可以調用的單個方法,基類包含像sendResponse()這樣的方法。 – musubi 2012-04-07 15:59:18

回答

0

我沒有看到任何效率問題給你當前code.It取決於實際情況。如果您問是否允許,這也是設計問題。平均值取決於問題域。因此,不要問這樣的問題,您應該熟悉design patterns

理解設計模式會給你深入瞭解如何設計和建築問題正在以標準的方式,以及如何具體的編程語言來解決這些問題的地址。

相關問題