使用 class 的面向对象 PHP 问题,涉及 PrestaShop 模块

Object Oriented PHP issues using a class, involving PrestaShop module

我想完成的事情

我正在更改 PrestaShop 模块,该模块当前使用用户提交的表单来生成文件,使其成为独立的 CRON 作业。该模块在后台完美运行,只需要用户点击一个按钮;一个重复的任务,应该由 CRON 作业处理(当然是动作,而不是点击按钮)。

我正在尝试什么

if (!defined('_PS_VERSION_')) {
    // Initialize prestashop
    require_once '../../config/config.inc.php';
    require_once '../../init.php';

    define('_PS_MODE_DEV_', true);
    echo 'This gets echoed';
    $exporter = new order_exporter;
    echo 'This does not get echoed';
}

class order_exporter extends Module
{
    // Rest of code here. Works when used with back office.
}

我得到的行为

第一个 echo 有效,但是一旦我调用 $exporter = new order_exporter;,我就得到了这个错误。 PHP Fatal error: Class 'order_exporter' not found in C:\wamp\www\addressstamps\modules\order_exporter\order_exporter.php。这不在屏幕上,只在我的错误日志中。正如我过去所理解的那样,这是使用 OOP 的正确方法。我不确定我是否误解了有关 Prestashop、OOP 或 Scope 的某些内容,但经过大量研究和调整后,我在这一点上没有取得任何进展。

这不是 OOP 问题,而是 PrestaShop 的设计决定。

试试:

$exporter = Module::getInstanceByName('order_exporter');

而不是:

$exporter = new order_exporter;

此处 'order_exporter' 是您的模块名称(即来自 class 的名称 属性)。