Создание пользовательской функции в отдельном файле php, доступном из контроллера

Я хочу написать функцию для catalog->controller->checkout->cart.php в Opencart 2.3.0.2. Я уже написал логику для проверки priduct_id и действий, которые необходимо предпринять, если будет найден определенный идентификатор продукта. Теперь я хочу вынести эту логику в отдельную функцию в отдельный файл php, чтобы она стала более управляемой.

Я создал функцию в файле php в разделе system-> helper и загрузил ее из startup.php. Затем я могу вызвать эту функцию из cart.php, но ссылка на переменную $this будет потеряна, даже если я передам $this этой функции.

Мой урезанный код выглядит так: cart.php

//some code before this
  if (!$json) {
                // Check if Product is Addon
                 test($this);
        //more code after this

пользовательская функция.php

    function test($this) {  
    // print_r("Test Called");
    $temp = $this->request->post['product_id'];
    if ($this->request->post['product_id'] == 142) {
                    $json['success']   = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']), $product_info['name'], $this->url->link('checkout/cart'));
                    $product_options   = $this->model_catalog_product->getProductOptions($this->request->post['product_id']);
                    $product_option_id = $product_option['product_option_id'];
//more code

Я получаю сообщение об ошибке

$this->request->post['product_id'];

Может кто-нибудь сказать мне, как вызвать пользовательскую функцию из отдельного файла php, сохраняя ссылку на переменную $this.


person Silkograph    schedule 27.10.2018    source источник


Ответы (1)


$this зарезервированное слово в php:

Псевдопеременная $this доступна, когда метод вызывается из контекста объекта.

Вместо этого попробуйте:

function test($ctrl) { 
    $temp = $ctrl->request->post['product_id'];
    if ($ctrl->request->post['product_id'] == 142) {
    ...
person Николай Лубышев    schedule 27.10.2018