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 ...
}
}

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Huawei 휴대폰에서 이중 WeChat 로그인을 구현하는 방법은 무엇입니까? 소셜 미디어의 등장으로 WeChat은 사람들의 일상 생활에 없어서는 안될 커뮤니케이션 도구 중 하나가 되었습니다. 그러나 많은 사람들이 동일한 휴대폰에서 동시에 여러 WeChat 계정에 로그인하는 문제에 직면할 수 있습니다. Huawei 휴대폰 사용자의 경우 듀얼 WeChat 로그인을 달성하는 것은 어렵지 않습니다. 이 기사에서는 Huawei 휴대폰에서 듀얼 WeChat 로그인을 달성하는 방법을 소개합니다. 우선, 화웨이 휴대폰과 함께 제공되는 EMUI 시스템은 듀얼 애플리케이션 열기라는 매우 편리한 기능을 제공합니다. 앱 듀얼 오픈 기능을 통해 사용자는 동시에

nohup의 역할과 원리 분석 nohup은 유닉스 및 유닉스 계열 운영체제에서 사용자가 현재 세션을 종료하거나 터미널 창을 닫아도 백그라운드에서 명령을 실행하는 데 일반적으로 사용되는 명령입니다. 아직도 계속 처형되고 있다. 이번 글에서는 nohup 명령의 기능과 원리를 자세히 분석해보겠습니다. 1. nohup의 역할: 백그라운드에서 명령 실행: nohup 명령을 통해 사용자가 터미널 세션을 종료해도 영향을 받지 않고 장기 실행 명령이 백그라운드에서 계속 실행되도록 할 수 있습니다. 이건 실행해야 해

프로그래밍 언어 PHP는 다양한 프로그래밍 논리와 알고리즘을 지원할 수 있는 강력한 웹 개발 도구입니다. 그중 피보나치 수열을 구현하는 것은 일반적이고 고전적인 프로그래밍 문제입니다. 이 기사에서는 PHP 프로그래밍 언어를 사용하여 피보나치 수열을 구현하는 방법을 소개하고 구체적인 코드 예제를 첨부합니다. 피보나치 수열은 다음과 같이 정의되는 수학적 수열입니다. 수열의 첫 번째와 두 번째 요소는 1이고 세 번째 요소부터 시작하여 각 요소의 값은 이전 두 요소의 합과 같습니다. 시퀀스의 처음 몇 가지 요소

Huawei 휴대폰에서 WeChat 복제 기능을 구현하는 방법 소셜 소프트웨어의 인기와 개인 정보 보호 및 보안에 대한 사람들의 강조가 높아지면서 WeChat 복제 기능이 점차 주목을 받고 있습니다. WeChat 복제 기능을 사용하면 사용자가 동일한 휴대폰에서 여러 WeChat 계정에 동시에 로그인할 수 있으므로 관리 및 사용이 더 쉬워집니다. Huawei 휴대폰에서 WeChat 복제 기능을 구현하는 것은 어렵지 않습니다. 다음 단계만 따르면 됩니다. 1단계: 휴대폰 시스템 버전과 WeChat 버전이 요구 사항을 충족하는지 확인하십시오. 먼저 Huawei 휴대폰 시스템 버전과 WeChat 앱이 최신 버전으로 업데이트되었는지 확인하세요.

오늘날의 소프트웨어 개발 분야에서 효율적이고 간결하며 동시성이 뛰어난 프로그래밍 언어인 Golang(Go 언어)은 점점 더 개발자들의 선호를 받고 있습니다. 풍부한 표준 라이브러리와 효율적인 동시성 기능으로 인해 게임 개발 분야에서 주목받는 선택이 되었습니다. 이 기사에서는 게임 개발에 Golang을 사용하는 방법을 살펴보고 특정 코드 예제를 통해 Golang의 강력한 가능성을 보여줍니다. 1. 게임 개발에서 Golang의 장점 Golang은 정적인 유형의 언어로서 대규모 게임 시스템을 구축하는 데 사용됩니다.

제목: DreamWeaver CMS의 보조 디렉터리를 열 수 없는 이유와 해결 방법 분석 Dreamweaver CMS(DedeCMS)는 다양한 웹 사이트 구축에 널리 사용되는 강력한 오픈 소스 콘텐츠 관리 시스템입니다. 그러나 때로는 웹사이트를 구축하는 과정에서 보조 디렉토리를 열 수 없는 상황이 발생할 수 있으며, 이로 인해 웹사이트의 정상적인 작동에 문제가 발생할 수 있습니다. 이 기사에서는 보조 디렉터리를 열 수 없는 가능한 이유를 분석하고 이 문제를 해결하기 위한 구체적인 코드 예제를 제공합니다. 1. 예상 원인 분석: 의사 정적 규칙 구성 문제: 사용 중

목차 Astar Dapp 스테이킹 원리 스테이킹 수익 잠재적 에어드랍 프로젝트 해체: AlgemNeurolancheHealThreeAstar Degens DAOVeryLongSwap 스테이킹 전략 및 운영 "AstarDapp 스테이킹"이 올해 초 V3 버전으로 업그레이드되었으며 스테이킹 수익에 많은 조정이 이루어졌습니다. 규칙. 현재 첫 번째 스테이킹 주기는 종료되었으며 두 번째 스테이킹 주기의 "투표" 하위 주기가 막 시작되었습니다. '추가 보상' 혜택을 받으려면 이 중요한 단계(6월 26일까지 지속 예정, 5일 미만 남았음)를 파악해야 합니다. 아스타 스테이킹 수익을 자세하게 분석해보겠습니다.

제목: Tencent의 주요 프로그래밍 언어는 Go: 심층 분석 중국 최고의 기술 회사로서 Tencent는 프로그래밍 언어 선택에 있어 항상 많은 관심을 받아 왔습니다. 최근 몇 년 동안 일부 사람들은 Tencent가 주로 Go를 주요 프로그래밍 언어로 채택했다고 믿고 있습니다. 이 기사에서는 Tencent의 주요 프로그래밍 언어가 Go인지에 대한 심층 분석을 수행하고 이러한 관점을 뒷받침하는 구체적인 코드 예제를 제공합니다. 1. Tencent에 Go 언어 적용 Go는 Google에서 개발한 오픈 소스 프로그래밍 언어로 효율성, 동시성 및 단순성으로 인해 많은 개발자에게 사랑을 받고 있습니다.
