0

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

<?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();
?>

我这样做的目的是能够通过 using 访问所有内容$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);
4

1 回答 1

0

我没有看到任何效率问题给您当前的代码。这取决于实际情况。如果您问它是否允许,那也是设计问题。手段取决于问题域。因此,您应该熟悉设计模式,而不是问这样的问题。

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

于 2012-04-07T16:32:38.770 回答