从基类内创建子类的新实例

时间:2012-04-07 15:36:31

标签: php

我希望能够首先创建一个基类的新实例,然后从该基类中我希望能够创建一个新的子类实例。我还希望能够从子类中调用基类方法。我尝试使用下面的代码,它按我想要的方式工作,但这是一个不好的做法,它是否有内存效率?还有其他意见吗?

<?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->访问所有内容,就像CodeIgniter的工作方式一样。这是我在私有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);

1 个答案:

答案 0 :(得分:0)

我没有看到任何效率问题给你当前的代码。这取决于实际情况。如果你问它是否允许这也是设计问题.Means取决于问题域。因此,您应该熟悉design patterns而不是问这些问题。

了解设计模式将使您深入了解如何以标准方式解决设计和架构问题,以及特定编程语言如何解决这些问题。