ホームページ >バックエンド開発 >PHPチュートリアル >オープンカート分析_PHP チュートリアル

オープンカート分析_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:54:29998ブラウズ

opencart を 2 日間学習した後、その実装原則の概要を作成し、皆さんと話し合います。


opencart は独自に開発されたアーキテクチャであり、その実装アイデアも MVC に基づいており、アーキテクチャのコアはシステム/エンジンの下にあり、いくつかのファイルが含まれています。

1):controller.php すべてのコントローラーの基本クラス

2): action.php アクションステアリング、つまりパス。たとえば、カタログの下のクラスControllerAccountAddressはアカウント/アドレス用です

3):front.php フロントエンドアクション実行ファイル。これはaction.phpに基づく操作であり、データをロードするaction.phpと同等であり、front.phpは実行を担当するアクションです。

4):loader.php これは、データベース、モデル、ライブラリの下のファイルを含む、関連するクラス ライブラリ ファイルをロードします。呼び出しメソッドは $this->load->library("ライブラリの下のファイル名 ") です。 D Model、$ this-& gt- & gt; などの他の参照loader.phpファイル

5):model.php このファイルはすべてのモデルの基本クラスであり、これ以上の説明は行いません。

6): registry.php このファイルの実装は Model.php と同じです。このクラス Registry は、index.php のスタート ページではシングルトン (Singleton) です。 まず、コンストラクタのパラメータとして使用するクラスの値を渡してクラスインスタンスを作成し、このクラスインスタンスを「レジストリ」に設定します

このレジストリは共有データ バスのようなもので、さまざまなモジュール/データを接続します。


System の下にいくつかのパブリック クラスがあるため、基本クラスとパブリック クラスはレジストリに登録されているindex.php を通じてロードされるため、必要なクラスとファイルをロードできます

var_dump($registry);exit; Index.php にブレークポイントを設定して出力された内容 (インターセプトされた部分) は次のとおりです。

オブジェクト(レジストリ)[1]
  プライベート 'データ' =>
    配列
      'ロード' =>
        オブジェクト(ローダー)[2]
          保護された「レジストリ」=>
            &オブジェクト(レジストリ)[1]
      '設定' =>
        オブジェクト(構成)[3]
          プライベート 'データ' =>
            配列
              ...
      'db' =>
        オブジェクト(DB)[4]
          プライベート 'ドライバー' =>
            オブジェクト(MySQL)[5]
              ...
      'url' =>
        オブジェクト(URL)[8]
          プライベート 'url' =>ヌル
          プライベート 'ssl' =>ヌル
          プライベート 'リライト' =>
            配列
              ...
      'ログ' =>
        オブジェクト(ログ)[9]
          プライベート 'ファイル名' =>文字列「error.txt」(長さ=9)
      'リクエスト' =>
        オブジェクト(リクエスト)[10]
          public 'get' =>
            配列
              ...
          公開「投稿」 =>
            配列
              ...
          パブリック 'Cookie' =>
            配列
              ...
          パブリック 'ファイル' =>
            配列
              ...
          パブリック 'サーバー' =>
            配列
              ...
          パブリック 'リクエスト' =>
            配列
              ...
      '応答' =>
        オブジェクト(応答)[11]
          プライベート 'ヘッダー' =>
            配列
print_r($registry->get('config')->get('account_module'));exit; これは印刷された個別のプロパティのコンテンツです

次の例による説明:

registry.php のインフォメーション下記:

最終クラス登録 {
プライベート $data = array();
パブリック関数 get($key) {
return (isset($this->data[$key]) ? $this->data[$key] : NULL);
}
パブリック関数セット($key, $value) {
$this->data[$key] = $value;
}

パブリック関数 has($key) {
     return isset($this->data[$key]);
   }
}

コントローラーのインフォメーションは下記(一部抜粋):

抽象クラス コントローラー {
保護された $registry;
保護された $id;
保護された $layout;
保護された $template;
protected $children = array();
protected $data = array();
保護された $output;

パブリック関数 __construct($registry) {
$this->registry = $registry;
}

パブリック関数 __get($key) {
return $this->registry->get($key);
}

パブリック関数 __set($key, $value) {
$this->registry->set($key, $value);
}
}

いくつかの変数を任意に宣言します:

$arr=array("カマキリ"=>"タスク","合肥"=>"安徽省");
$str="中国、安徽省合肥市";

クラスを宣言します:

クラスデータベース{
プライベート $xx='123456';
プライベート $data=array();
パブリック関数 get($key) {
Return (isset($this->data[$key]) ? $this->data[$key] : $key);
}

関数connect(){
echo '接続中です...';
}
}

//コントロールクラスを宣言します:

クラスControllerAccountFixはControllerを拡張します{
var $name;
var $age;
var $key='Opencat';
関数 __construct(){
$this->name='c';
$this->age='12';
}
関数 fix(){
echo $this->key.PHP_EOL;
}
}

//登録クラスを宣言する


$reg=新しいレジストリ();

このデータを登録して公開部分にしてください:

$reg->set("arr",$arr);
$reg->set("str",$str);
$reg->set("クラス",new ControllerAccountFix());
$reg->set("db",new db());


$controller = 新しいControllerAccountFix($reg);
if (is_callable(array($controller, 'fix'))) {
$action = call_user_func_array(array($controller, 'fix'), array('dddd'));
}


//上記のコードは Opencart を出力します。


コントロール クラスを書き換えます:

クラスControllerAccountFixはControllerを拡張します{
保護された $registry; www.2cto.com

関数 fix(){

echo $this->db->get('xx') //出力 123456

エコー }

}

http://www.bkjia.com/PHPjc/477963.html

tru​​ehttp://www.bkjia.com/PHPjc/477963.html技術記事 opencart を 2 日間勉強した後、その実装原則の概要を作成し、皆さんと話し合います。opencart は自社開発のアーキテクチャであり、その実装アイデアも MVC に基づいています...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。