opencart分析
研究了两天opencart,对其中的实现原理做个小结,和各位共同探讨下:
opencart是自有开发的一套架构,其实现思想也是基于MVC的一种方式,架构的核心在system/engine下面,包括了几个文件,
1):controller.php 所有控制器的基类
2):action.php 动作转向,也就是路径,比如 catalog下面的类ControllerAccountAddress就是对于account/address
3): front.php 前端动作执行文件,这个是在action.php基础上进行的操作,也就是相当于action.php是加载了数据,而front.php是动作,负责执行的。
4):loader.php 这个是加载相关的类库文件,包括database下的,model下的,library下的文件,调用方法就是$this->load->library("library下的文件名“)
其他参考loader.php文件,比如model,$this->load->model("account/address");
5):model.php 这个文件是所有model的基类,不作多说明。
6):registry.php 这个文件的实现和Model.php一样,这个类 Registry是整个系统的信息中枢, Registry是一个单例(Singleton),在index.php起始页面中,
首先作为构造函数参数传 值 所要用到的类创建类实例,并随之将这个类实例设置到这个“注册表”中,
这个注册表就像是一个共享的数据总线一样,把各个模块/数据串联在一起。
在System下有一些公共类,所以的基础类和公共类都是通过index.php 去加载的,也就是 Registry注册的,这样你就可以去加载你需要的类和文件了
var_dump($registry);exit;在index.php设置断点打印出来的内容 (截取部分)显示如下:
object(Registry)[1]
private 'data' =>
array
'load' =>
object(Loader)[2]
protected 'registry' =>
&object(Registry)[1]
'config' =>
object(Config)[3]
private 'data' =>
array
...
'db' =>
object(DB)[4]
private 'driver' =>
object(MySQL)[5]
...
'url' =>
object(Url)[8]
private 'url' => null
private 'ssl' => null
private 'rewrite' =>
array
...
'log' =>
object(Log)[9]
private 'filename' => string 'error.txt' (length=9)
'request' =>
object(Request)[10]
public 'get' =>
array
...
public 'post' =>
array
...
public 'cookie' =>
array
...
public 'files' =>
array
...
public 'server' =>
array
...
public 'request' =>
array
...
'response' =>
object(Response)[11]
private 'headers' =>
array
print_r($registry->get('config')->get('account_module'));exit; 这是打印单个属性的内容
下面用实例来说明:
registry.php类的声明如下:
final class Registry {
private $data = array();
public function get($key) {
return (isset($this->data[$key]) ? $this->data[$key] : NULL);
}
public function set($key, $value) {
$this->data[$key] = $value;
}
public function has($key) {
return isset($this->data[$key]);
}
}
controller的声明如下(截取部分):
abstract class Controller {
protected $registry;
protected $id;
protected $layout;
protected $template;
protected $children = array();
protected $data = array();
protected $output;
public function __construct($registry) {
$this->registry = $registry;
}
public function __get($key) {
return $this->registry->get($key);
}
public function __set($key, $value) {
$this->registry->set($key, $value);
}
}
任意声明一些变量:
$arr=array("mantis"=>"task","hefei"=>"anhui");
$str="中国安徽合肥";
声明一个类:
class db{
private $xx='123456';
private $data=array();
public function get($key) {
return (isset($this->data[$key]) ? $this->data[$key] : $key);
}
function connect(){
echo 'you are connecting...';
}
}
//声明一个控制类:
class ControllerAccountFix extends Controller{
var $name;
var $age;
var $key='Opencat';
function __construct(){
$this->name='c';
$this->age='12';
}
function fix(){
echo $this->key.PHP_EOL;
}
}
//声明注册类
$reg=new registry();
注册这些数据成为公共的部分:
$reg->set("arr",$arr);
$reg->set("str",$str);
$reg->set("class",new ControllerAccountFix());
$reg->set("db",new db());
$controller = new ControllerAccountFix($reg);
if (is_callable(array($controller, 'fix'))) {
$action = call_user_func_array(array($controller, 'fix'), array('dddd'));
}
//以上代码输出Opencart。
在把控制类重写一下:
class ControllerAccountFix extends Controller{
protected $registry; www.2cto.com
function fix(){
echo $this->db->get('xx'); //输出123456
echo $this->db->connect();//输出 you are connecting ...
}
}

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Bagaimana untuk melaksanakan log masuk WeChat dwi pada telefon mudah alih Huawei? Dengan kebangkitan media sosial, WeChat telah menjadi salah satu alat komunikasi yang sangat diperlukan dalam kehidupan seharian orang ramai. Walau bagaimanapun, ramai orang mungkin menghadapi masalah: log masuk ke beberapa akaun WeChat pada masa yang sama pada telefon mudah alih yang sama. Bagi pengguna telefon mudah alih Huawei, tidak sukar untuk mencapai log masuk WeChat dwi Artikel ini akan memperkenalkan cara mencapai log masuk WeChat dwi pada telefon mudah alih Huawei. Pertama sekali, sistem EMUI yang disertakan dengan telefon mudah alih Huawei menyediakan fungsi yang sangat mudah - pembukaan dua aplikasi. Melalui fungsi pembukaan dwi aplikasi, pengguna boleh serentak

Bagaimana untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Dengan populariti perisian sosial dan penekanan yang semakin meningkat terhadap privasi dan keselamatan orang ramai, fungsi klon WeChat telah beransur-ansur menjadi tumpuan perhatian. Fungsi klon WeChat boleh membantu pengguna log masuk ke berbilang akaun WeChat pada telefon mudah alih yang sama pada masa yang sama, menjadikannya lebih mudah untuk diurus dan digunakan. Tidak sukar untuk melaksanakan fungsi klon WeChat pada telefon mudah alih Huawei Anda hanya perlu mengikuti langkah berikut. Langkah 1: Pastikan versi sistem telefon mudah alih dan versi WeChat memenuhi keperluan Pertama, pastikan versi sistem telefon mudah alih Huawei anda telah dikemas kini kepada versi terkini, serta Apl WeChat.

Bahasa pengaturcaraan PHP ialah alat yang berkuasa untuk pembangunan web, yang mampu menyokong pelbagai logik dan algoritma pengaturcaraan yang berbeza. Antaranya, melaksanakan jujukan Fibonacci adalah masalah pengaturcaraan biasa dan klasik. Dalam artikel ini, kami akan memperkenalkan cara menggunakan bahasa pengaturcaraan PHP untuk melaksanakan jujukan Fibonacci, dan melampirkan contoh kod tertentu. Jujukan Fibonacci ialah jujukan matematik yang ditakrifkan seperti berikut: unsur pertama dan kedua bagi jujukan ialah 1, dan bermula dari unsur ketiga, nilai setiap unsur adalah sama dengan jumlah dua unsur sebelumnya. Beberapa elemen pertama urutan

Analisis peranan dan prinsip nohup Dalam sistem pengendalian seperti Unix dan Unix, nohup ialah arahan yang biasa digunakan yang digunakan untuk menjalankan arahan di latar belakang Walaupun pengguna keluar dari sesi semasa atau menutup tetingkap terminal, arahan itu boleh masih terus dilaksanakan. Dalam artikel ini, kami akan menganalisis fungsi dan prinsip arahan nohup secara terperinci. 1. Peranan nohup: Menjalankan arahan di latar belakang: Melalui arahan nohup, kita boleh membiarkan arahan yang berjalan lama terus dilaksanakan di latar belakang tanpa terjejas oleh pengguna yang keluar dari sesi terminal. Ini perlu dijalankan

Dalam bidang pembangunan perisian hari ini, Golang (bahasa Go), sebagai bahasa pengaturcaraan yang cekap, ringkas dan sangat bersesuaian, semakin digemari oleh pembangun. Perpustakaan standardnya yang kaya dan ciri-ciri konkurensi yang cekap menjadikannya pilihan berprofil tinggi dalam bidang pembangunan permainan. Artikel ini akan meneroka cara menggunakan Golang untuk pembangunan permainan dan menunjukkan kemungkinan besarnya melalui contoh kod tertentu. 1. Kelebihan Golang dalam pembangunan permainan Sebagai bahasa yang ditaip secara statik, Golang digunakan dalam membina sistem permainan berskala besar.

Tajuk: Analisis sebab dan penyelesaian mengapa direktori sekunder DreamWeaver CMS tidak boleh dibuka Dreamweaver CMS (DedeCMS) ialah sistem pengurusan kandungan sumber terbuka yang berkuasa yang digunakan secara meluas dalam pembinaan pelbagai laman web. Walau bagaimanapun, kadangkala semasa proses membina tapak web, anda mungkin menghadapi situasi di mana direktori sekunder tidak boleh dibuka, yang membawa masalah kepada operasi biasa tapak web. Dalam artikel ini, kami akan menganalisis kemungkinan sebab mengapa direktori sekunder tidak boleh dibuka dan memberikan contoh kod khusus untuk menyelesaikan masalah ini. 1. Analisis sebab yang mungkin: Masalah konfigurasi peraturan pseudo-statik: Semasa penggunaan

Jadual Kandungan Prinsip Staking Astar Dapp Staking Hasil Pembongkaran Projek Airdrop Berpotensi: AlgemNeurolancheHealthreeAstar Degens DAOVeryLongSwap Staking Strategi & Operasi "AstarDapp Staking" telah dinaik taraf kepada versi V3 pada awal tahun ini, dan banyak pelarasan telah dibuat pada staking peraturan. Pada masa ini, kitaran pertaruhan pertama telah tamat, dan kitaran kecil "pengundian" kitaran pertaruhan kedua baru sahaja bermula. Untuk mendapatkan faedah "ganjaran tambahan", anda perlu memahami peringkat kritikal ini (dijangka akan berlangsung sehingga 26 Jun, berbaki kurang daripada 5 hari). Saya akan memecahkan pendapatan pertaruhan Astar secara terperinci,

Tajuk: Adakah bahasa pengaturcaraan utama Tencent Go: Analisis mendalam Sebagai syarikat teknologi terkemuka di China, Tencent sentiasa menarik banyak perhatian dalam pilihan bahasa pengaturcaraannya. Dalam beberapa tahun kebelakangan ini, sesetengah orang percaya bahawa Tencent menggunakan Go sebagai bahasa pengaturcaraan utamanya. Artikel ini akan menjalankan analisis mendalam sama ada bahasa pengaturcaraan utama Tencent ialah Go dan memberikan contoh kod khusus untuk menyokong pandangan ini. 1. Aplikasi bahasa Go dalam Tencent Go ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google Kecekapan, kesesuaian dan kesederhanaannya disukai oleh banyak pembangun.
