2012-04-07 23 views
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(); 
?> 

私の意図は、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); 
+0

BaseClassにサブクラスインスタンスのプロパティを持たせなければならない理由は? – xdazz

+0

サブクラスが基本クラスに格納されている必要がありますか?それは悪い習慣であり、あなたがまだ持っていないものをあなたに与えるようには思われません。 – clexmond

+0

これは私のウェブサイト用のREST APIを構築する方法の1つでしたが、私だけが使用します。もともと私は、サブクラスの新しいインスタンスを作成するためにそれをセットアップした後、サブクラスのコンストラクタは基本クラスのコンストラクタを呼び出すことができます。次に、サブクラスメソッドを呼び出すために、call_user_func_array()を使用しました。私は、データベースに存在するかどうかを確認するAPIキーを使用して簡単な認証を実装しようとしています。基本的に、サブクラスには、呼び出すことができる個々のメソッドがすべて含まれており、基本クラスにはsendResponse()などのメソッドが含まれています。 – musubi

答えて

0

現在のコードに効率の問題はありません。実際の状況によって異なります。あなたが許可されているかどうかを尋ねている場合は、設計上の問題です.Meansは、問題のドメインに依存しています。したがって、そのような質問をする代わりにdesign patternsに慣れてください。

デザインパターンを理解することで、デザインやアーキテクチャ上の問題が標準的な方法でどのように解決されているか、特定のプログラミング言語がこれらの問題にどのように対処しているかを把握できます。

関連する問題