2011-09-16 4 views
4

私は少数のライブラリ/クラスを最初からPHPで作成してきました。私はcodeigniterの背景から来て、私は同様の機能を持ついくつかのライブラリを作ろうとしています。私はオブジェクトに関する問題に走り続けています。オブジェクトとライブラリを整理する

何とかスーパーオブジェクト$thisを作成する最善の方法はありますか?私の主な問題は、私はビューオブジェクトを作成したと私はそうのように見えるloadと呼ばれる機能を実行することです:

class View { 

     public function __construct() { 
     } 

     public function load($file = NULL, $data = array()) { 
       if($file) { 
         $file .= '.php'; 
         if(file_exists($file)) { 
           // Extract variables BEFORE including the file 
           extract($data); 
           include $file; 
           return TRUE; 
         } else { 
           echo 'View not found'; 
           return FALSE; 
         } 
       } else { 
         return FALSE; 
       } 
     } 
} 

はその後、私のPHPファイルで、私は次のようになりますどのトップinclude 'libraries.php';であります

include 'database.php'; 
include 'view.php'; 
include 'input.php'; 
include 'form.php'; 

$config = array(
     'host' => 'localhost', 
     'username' => 'username', 
     'password' => 'password', 
     'database' => 'database' 
); 

$database = new Database($config); 
$view = new View(); 
$input = new Input(); 
$form = new Form(); 

私はライブラリを含むファイルから、エラーなしで$form->value('name');のようなものを書くことができます。私はこのような何かを行う場合は、:

$view->load('folder/index', array('var_name' => 'var_value'));

はその後 folder/index.phpファイルから私はちょうど罰金 $var_nameではなく $form->value('name');にアクセスすることができます。私はエラーを受け取ります Call to a member function value() on a non-object in ...

私の質問はどのように再利用可能な方法で私のライブラリとクラスを整理できますか?私はフロントローダー(すべてが最初に実行されるファイルindex.php)を使いたくない。これは私が授業を書いた方法の問題かもしれませんが、物事がどこにあるかなどの大きな問題だと思います。

+0

使用名前空間(少なくとも偽のもの)と自動ロード – arnaud576875

+0

'私は'私がなぜ本当に興味フロントローダ(すべては最初に通ることindex.phpファイル)を使用したくありませんか? – Alfwed

+3

レジストリを使用して、私はそれをお勧めしませんどこでもあなたのすべてのオブジェクトにアクセスすることができます。別のオプションは依存性注入を行うことです。 – Alfwed

答えて

1

あなたのライブラリ/クラスファイルを共通のディレクトリに入れてください。何かのように:

www 
|_includes 
| |_classes 
| | |_view.php 
| |_config 
| |_database.php 
|_other_folder 
    |_index.php 
あなたは、共通これにあなたの.htaccessファイルのインクルードパスに設定することができます

ディレクトリ「には、」:

php_value include_path .:/path/to/www/includes 

その後other_folder/index.phpのちょうどのようなものを必要なファイル:

​​
関連する問題