まずベースクラスの新しいインスタンスを作成し、そのベースクラス内からサブクラスの新しいインスタンスを作成できるようにしたいと考えています。私はまた、サブクラス内から基本クラスのメソッドを呼び出すことができるようにしたい。私は以下のコードで試してみましたが、それは私が望むように動作しますが、これは悪い習慣であり、メモリ効率的ですか?他のコメント?これを行うためのベースクラス内からサブクラスの新しいインスタンスを作成する
<?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();
?>
私の意図は、CodeIgniterのがどのように動作するかのように、$this->
を使用して、すべてにアクセスできるようにしました。これは、プライベートAPIのindex.phpファイルにあるものです。 call_user_func_array()を呼び出す前にAPIリクエストを認証できるようにしたいと思います。認証のためにデータベースに接続する必要もありますが、サブクラスからもDBにアクセスできるようにしたいと考えています。本質的に、コードはどの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を構築する方法の1つでしたが、私だけが使用します。もともと私は、サブクラスの新しいインスタンスを作成するためにそれをセットアップした後、サブクラスのコンストラクタは基本クラスのコンストラクタを呼び出すことができます。次に、サブクラスメソッドを呼び出すために、call_user_func_array()を使用しました。私は、データベースに存在するかどうかを確認するAPIキーを使用して簡単な認証を実装しようとしています。基本的に、サブクラスには、呼び出すことができる個々のメソッドがすべて含まれており、基本クラスにはsendResponse()などのメソッドが含まれています。 – musubi