Я хочу, чтобы иметь возможность сначала создать новый экземпляр базового класса, а затем изнутри этого базового класса я хочу иметь возможность создать новый экземпляр подкласса. Я также хочу иметь возможность вызывать методы базового класса из подкласса. Я попробовал его с приведенным ниже кодом, и он работает, как я хочу, но это плохая практика и эффективна ли память? Любые другие комментарии?Создание нового экземпляра подкласса из базового класса
<?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. Это то, что у меня есть в файле index.php для моего частного API. Я хочу иметь возможность аутентифицировать запрос API перед вызовом call_user_func_array(). Мне также нужно подключиться к базе данных для проверки подлинности, но я хочу иметь возможность получить доступ к базе данных из подкласса. По сути, код определяет, какой метод 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);
Причина, по которой вы должны позволить BaseClass иметь свойство экземпляра подкласса? – xdazz
Какова возможная причина для подкласса, хранящегося в базовом классе? Это плохая практика и, похоже, не дает вам ничего, чего вы бы этого не сделали. – clexmond
Это был один из способов, по которым я думал о создании REST API для моего сайта, но будет использоваться только мной. Первоначально у меня была настройка для создания нового экземпляра подкласса, тогда конструктор подкласса может вызвать конструктор базового класса. Затем для вызова метода подкласса я использовал call_user_func_array(). Я пытаюсь реализовать простую аутентификацию с помощью ключа API, который просто проверяет, существует ли он в базе данных. В основном подкласс содержит все отдельные методы, которые могут быть вызваны, и базовый класс содержит такие методы, как sendResponse(). – musubi