Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по ООП, Вызов метода другого класса 
V
    Опции темы
Just123
  Дата 12.7.2010, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 9.12.2007
Где: localhost

Репутация: нет
Всего: нет



Начал изучать Code Igniter, столкнулся с небольшой загвоздкой  в лице следующей строчки:

Код

$this->config->item


Что значит эта запись?

Метода config нет, но есть класс config и в нём метод item. 
Я правильно понимаю, что таким способом вызывается метод из другого класса?
PM MAIL   Вверх
NLspieler
Дата 12.7.2010, 06:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



$this->config  соответствует свойству/переменной $config, текущего объекта
В этой переменной может храниться другой объект, который имеет свойство $item.

$this->config->item  обращается к свойству item объекта, который хранится в свойстве config текущего объекта.

PM MAIL   Вверх
Just123
Дата 13.7.2010, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 147
Регистрация: 9.12.2007
Где: localhost

Репутация: нет
Всего: нет



Ясно, спасибо. 
PM MAIL   Вверх
skyboy
Дата 13.7.2010, 23:25 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



есть "магические" методы __get, __set, _call которые позволяют обработать ситуацию, когда происходит обращение к не существующему в пределах класса объекта метода или свойства. Под "обработать ситуацию" следует понимать "возможно сделать вид, будто такое свойство/метод есть".
простой пример:
Код

class test {
 public function __get($name) {
  return $name;
 }
}
$obj = new test();
 echo $obj->a; // a
 echo $obj->something; // something

я не собираюсь тебя запутать посильнее. но, как мне кажется, в последнее время этим стали активнее пользоваться, и в следующий раз тебя может озадачить уже то, что метода/свойства как бы нет, но в то же время к нему идет обращение, не вызывающее ошибки.
и потому же свойства config у класса, который ты изучал, может не быть вовсе. 
но это не магия  smile 
PM MAIL   Вверх
NLspieler
Дата 14.7.2010, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: 16
Всего: 19



skyboy,
а в чем смысл обращения к несуществующему методу/свойству?

PM MAIL   Вверх
skyboy
Дата 14.7.2010, 22:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 75
Всего: 260



синтаксический сахар.
для начала - о несуществующих свойствах.
без этого механизма у нас будут либо "обычные" свойства, в которые можно писать/читать абсолютно неконтролируемо. либо будем иметь методы, в которых можно будет реализовывать проверки/выдачу сообщений об ошибочных данных и что угодно ещё. 
но тогда код будет такой:
Код

$obj1->setProp($obj2->getProp1() + $obj3->getProp3())

вместо варианта со свойствами:
Код

$obj1->prop = $obj2->prop1 + $obj3->prop3;

нагляднее ведь, правда?
а эта перезагрузка позволяет писать второй вариант, а сам класс будет для получения значения свойства вызывать одни методы, а для записи - другие. Плюс можно сделать свойства только для чтения или только для записи.
А вот __call может позволить использовать обертку над объектом, который, при необходимости, будет переадресовывать вызовы методов обернутому объекту. А для вызывающего кода это будет неважно.
Т.е. Proxy без необходимости вручную определять переадресацию всех общих методов.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1167 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.