0

これは私を夢中にさせています (わいせつな量のコーヒーを飲み、一晩中働くことは役に立ちません) アプリケーション内のどこからでもクラスにアクセスしたいと考えています。インデックス ページ内でクラスをインスタンス化します (lib/classes が自動的に読み込まれます) が、グローバル アクセスを取得できないようです。これは私のインデックスページです:

function __autoload($class)
{
    require LIBS . $class .'.php';
}

$Core = new Core($server, $user, $pass, $db);

これにより、Lib/classes が完全に自動ロードされ、Core がインスタンス化されます (これは、Lib/core.php 内で自動ロードされます)。

次に、コア内で、通常のデータベース接続を作成し、URL を取得して確認し、いくつかのクラス (自動ロードされます) をインスタンス化する場所で、__construct を作成します。ここでテンプレート クラスをインスタンス化します。コントローラーとモデル内のクラスにアクセスするためのグローバル アクセスが必要です。

class Core {

    function __construct(DATABASE VARIABLES IN HERE)
    {
        $this->Template = new Template();
    }

}

わかりましたので、親モデルと親コントローラー内で次のことを行うことで、テンプレート オブジェクトにアクセスできると考えました。

class Controller
{

    public $Core;

    function __construct()
    {
        global $Core;
        $this->Core = &$Core;
    }
}

$this->Core->Template->get_data();コントローラーはすべてのコントローラーを拡張する親であるため、テンプレートメソッドにアクセスするために書くだけでよいと思いましたか? これはエラーをスローするようです。

誰かが私に手を差し伸べてくれるなら、それは私が見落としていた単純なものに違いないと確信しています. この問題は私を夢中にさせています。

また、__construct 内の子コントローラー内の補足事項として、Parent を構築します。parent::_construct();

エラーは と のようNotice: Trying to get property of non-objectですFatal error: Call to a member function get_data() on a non-object

4

2 に答える 2

0

オブジェクトへのポインターを受け取る静的関数を作成Coreして実装できます。singleton

define ('USER', 'username');
define ('PASS', 'password');
define ('DSN', 'dsn');

class Core {

  private static $hInstance; 

  public static function getInstance() { 
    if (!(self::$hInstance instanceof Core)) {
        self::$hInstance = new Core(USER, PASS, DSN);
    } 

    return self::$hInstance; 
  }

  public function __construct($user, $pass, $dsn) {
     echo 'constructed';
  }
 }

次に、コントローラー内で次を使用できます。

$core = Core::getInstance();

を出力する必要がありますconstructed

編集

出力付きの静的関数を介して構築する方法を示すために更新されました。

于 2013-02-19T19:51:15.430 に答える
0
class Controller
{

    public $Core;

    function __construct(Core $core)
    {
        $this->Core = $core;
    }
}

class ControllerChild extends Controller {
    function __construct(Core $core, $someOtherStuff){
      parent::__construct($core) ;
      //And your $this->Core will be inherited, because it has public access
    }
}
  • 注:&オブジェクトを操作するときに記号を使用する必要はありません。オブジェクトは参照によって自動的に渡されます。
于 2013-02-19T19:49:02.467 に答える