crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> PHP, область видимости переменной
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2013, 18:59
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Не могу разобраться с областью видимости переменной.

Есть такой код и он работает:
<?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
  опции профиля:
сообщение 16.2.2013, 19:20
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 46
Регистрация: 17.3.2009
Из: Россия, Рыбинск
Пользователь №: 617

Спасибо сказали: 8 раз(а)




Репутация:   0  


Litkevich Yuriy, надо заинклюдить файл со своим классом в файле, где хочешь его использовать, функции:
include, include_once, require, require_once делают примерно одно и тоже, но есть нюансы.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2013, 22:07
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Vass, Хм, а почему тогда в файле, где объявлен класс ControllerCatalogAttribute нет ни одной подобной функции?
А при этом Pagination видится
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 16.2.2013, 22:10
Сообщение #4


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


PHP не компилирует модули до того, как начнёт их использовать. видимо там, где используется модуль с классом-потомком, предварительно где-то объявлен класс-предок. а в твоей форме - не объявлен. вот и всё.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.2.2013, 2:08
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Фух, оказалось всё не так просто, как я думал.
Т.к. openCart это, всё же некое прикладное ПО, то оно имеет свои внутренние правила, которые я ещё не понимаю.

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

П.С.
Отпишусь подробнее позже, а то голова дымит, надо спать.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 19.2.2013, 18:13
Сообщение #6


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


в общем, по первому сообщению и первому куску кода. Я так и не понял как внутри 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
  опции профиля:
сообщение 19.2.2013, 20:46
Сообщение #7


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


есть ещё переменная auto_prepend_file.
где-то в корне, в .htaccess, может стоять что-то типа:
php_value auto_prepend_file file_to_include.php
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.2.2013, 2:35
Сообщение #8


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


где-то (я не вникал как это всё завязано) внутрях я наткнулся на код, который находу делает require_once на основе аргумента.
Псевдо код:
foreach (getFileList ("dir") as file){
    require_once(file);
}
а каталогом является один из подкаталогов магазина.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 12:59