gpt4 book ai didi

php - OpenCart 如何访问其库类?

转载 作者:可可西里 更新时间:2023-10-31 22:43:31 25 4
gpt4 key购买 nike

我目前正在尝试更多地了解 OpenCart 的核心及其类的实际工作方式。我还在努力提高我的总体 OOP 技能,因为我仍在该领域学习,所以也许有一些明显的东西我没有看到。

我想知道 Controller 文件如何知道如何找到购物车类(例如)。

例如

在 catalog/controller/checkout cart 中有(显然删除了代码)

class ControllerCheckoutCart extends Controller {
public function index() {
$this->cart->update();
}

}

Controller类可以在system/engine/controller.php中找到

update()可以在system/library/cart中找到。

我假设在 controller.php 中会有一个指向购物车类的链接,或者一个由它制成的对象。 (我基于 $this-> 的使用)。

那么实际上是如何从 Controller 中找到购物车类的呢?

谢谢

最佳答案

首先,您的 ControllerCheckoutCart 扩展了 Controller 类,所以这是我们需要关注的类。您可以在 /system/engine/controller.php 中找到此类。

在这个类里面,有两个magic methods我们感兴趣。第一个是 __construct,其中加载了“registry”类(如果您感兴趣,可以在 /system/engine/registry.php 中找到)把它拆开 - 它非常简单)。

您可以将此视为商店使用的所有类的查找,例如模型文件、库文件等。在构造中,注册表被传递给 Controller ​​,因此它具有对它的引用

public function __construct($registry) {
$this->registry = $registry;
}

第二个也是更重要的魔术方法是 __get 方法。当类属性不存在时会调用此方法,如果您愿意,可以自己处理。 OpenCart 使用它来尝试从注册表中获取具有该键的类

public function __get($key) {
return $this->registry->get($key);
}

因此,任何 Controller 中的 $this->cart 都会尝试从注册表中获取具有键 cart 的对象。如果您查看 index.php 文件,您会看到这是在其中分配的

// Cart
$registry->set('cart', new Cart($registry));

关于php - OpenCart 如何访问其库类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22809285/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com