Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PHP, область видимости переменной
Форум на CrossPlatform.RU > Разработка > Интерпретируемые языки
Litkevich Yuriy
Не могу разобраться с областью видимости переменной.

Есть такой код и он работает:
<?php 
class ControllerCatalogAttribute extends Controller {
...
$pagination = new Pagination(); // Интерпретатор на Pagination не ругается.
...
}
?>

Есть код в который я добавил создание объекта своего собственного класса:
<?php
class ModelSaleYaCoupon extends Model {
...
$property = new YaProperty(); // Интерпретатор ругается на YaProperty.
...
}
?>
Сообщение об ошибке:
Цитата
Fatal error: Class 'YaProperty' not found in Y:\home\opencart1504\www\adam\model\sale\ya_coupon.php on line 30


не пойму как показать интерпретатору где искать определение/объявление класса
Vass
Litkevich Yuriy, надо заинклюдить файл со своим классом в файле, где хочешь его использовать, функции:
include, include_once, require, require_once делают примерно одно и тоже, но есть нюансы.
Litkevich Yuriy
Vass, Хм, а почему тогда в файле, где объявлен класс ControllerCatalogAttribute нет ни одной подобной функции?
А при этом Pagination видится
Iron Bug
PHP не компилирует модули до того, как начнёт их использовать. видимо там, где используется модуль с классом-потомком, предварительно где-то объявлен класс-предок. а в твоей форме - не объявлен. вот и всё.
Litkevich Yuriy
Фух, оказалось всё не так просто, как я думал.
Т.к. openCart это, всё же некое прикладное ПО, то оно имеет свои внутренние правила, которые я ещё не понимаю.

Но мне уже удалось добиться, чтобы мой класс заработал.

П.С.
Отпишусь подробнее позже, а то голова дымит, надо спать.
Litkevich Yuriy
в общем, по первому сообщению и первому куску кода. Я так и не понял как внутри ControllerCatalogAttribute виден Pagination, т.к. инклюдов никаких нет.

Но я нашёл файл system/startup.php
в котором были строчки: require_once(DIR_SYSTEM . 'library/template.php');
и добавил туда свой require_once(DIR_SYSTEM . 'library/ya_property.php'); // Ya

а в YaProperty добавил:
$this->db = $registry->get('db');
к стати, не знал что можно так объявить член класса, прямо в конструкторе. Эту строчку посмотрел в модуле Cart, который отвечает за корзину.
вот после этого всё заработало

Но так я и не понял из-за чего ModelSaleYaCoupon стал видеть мой YaProperty
Iron Bug
есть ещё переменная auto_prepend_file.
где-то в корне, в .htaccess, может стоять что-то типа:
php_value auto_prepend_file file_to_include.php
Litkevich Yuriy
где-то (я не вникал как это всё завязано) внутрях я наткнулся на код, который находу делает require_once на основе аргумента.
Псевдо код:
foreach (getFileList ("dir") as file){
    require_once(file);
}
а каталогом является один из подкаталогов магазина.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.