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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конкструкции вида class::method->something 
:(
    Опции темы
kkashicyn
Дата 29.12.2010, 12:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго времени суток!
Не могу разобраться с синтаксисом ООП в PHP:

как рассматривать конструкции вида, что они означают

Код

class::method()->something или

$obj->view->two->free




PM MAIL   Вверх
Shogun
Дата 29.12.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сёгун-сан
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв

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





--------------------
2b || !2b
PM MAIL ICQ Skype   Вверх
kkashicyn
Дата 29.12.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



С методами в принципе разобрался.

а вот тут объекты в объекте?

Код

$obj->view->two->free


Это сообщение отредактировал(а) kkashicyn - 29.12.2010, 15:37
PM MAIL   Вверх
Shogun
Дата 1.1.2011, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сёгун-сан
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 8.6.2006
Где: Кишинёв

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



Цитата
а вот тут объекты в объекте?
 агась

Код

class Obj
  {
    public $view;

    public function __construct()
      {
         $this->view = new View();
      }
  }

class View
  {
    public $two;

    public function __construct()
      {
         $this->two= new Two();
      }
  }

class Two
  {
    public $three = 'This is class Three.';
  }

$obj = new Obj();

echo $obj->view->two->three;

#и как результат выведет 
This is class Three.



Это сообщение отредактировал(а) Shogun - 1.1.2011, 16:29


--------------------
2b || !2b
PM MAIL ICQ Skype   Вверх
lumentek
Дата 3.1.2011, 02:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



А как узнать первому методу (в цепочке) то что за ним идет цепочка других методов до указание в этом методе return $this;
Тоесть например я в одном случае хочу вызвать $class->first_method() и получить конкретное значение, а в другом случае хочу использовать в этом же проекте цепочке $class->first_method()->second_method();
PM MAIL   Вверх
skyboy
Дата 3.1.2011, 10:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(lumentek @  3.1.2011,  01:01 Найти цитируемый пост)
А как узнать первому методу (в цепочке) то что за ним идет цепочка других методов до указание в этом методе return $this;

без return'a никак. никто не "знает, что дальше идет цепочка вызовов". нету такого отдельного механизма, как "цепочка вызовов", это просто код выглядит так.
на самом деле, код работает абсолютно так же, как и 
Код

($object->first_method())->second_method()

или
Код

var $temp = $class->first_method();
$temp->second_method();

потому нет return(не обязательно $this; любое необходимое значение, являющееся объектом) - нет возможности циклического вызова методов.
а что, сложно написать return $this?  smile 
PM MAIL   Вверх
lumentek
Дата 3.1.2011, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Нет,  я имею ввиду другое.

Например есть класс FilesUpload, у которого есть метод getArrFile(), который возвращает массив такой же как и $_FILES (tmp_name, name, size итд).
И есть отдельные методы, возвращающий нужный елемент этого массива, например  getTmpName()

Например $cls = new FilesUploads();
$arrFile = $cls->getArrFile()->getTmpName();

Как сделать так чтобы если вызвали просто метод getArrFile(), то он вернул массив, а если использовали метод сцепления, то он вернул соответсвующий элемент?
PM MAIL   Вверх
perloid
Дата 3.1.2011, 20:05 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(lumentek @ 3.1.2011,  17:46)
Нет,  я имею ввиду другое.

Например есть класс FilesUpload, у которого есть метод getArrFile(), который возвращает массив такой же как и $_FILES (tmp_name, name, size итд).
И есть отдельные методы, возвращающий нужный елемент этого массива, например  getTmpName()

Например $cls = new FilesUploads();
$arrFile = $cls->getArrFile()->getTmpName();

Как сделать так чтобы если вызвали просто метод getArrFile(), то он вернул массив, а если использовали метод сцепления, то он вернул соответсвующий элемент?

Реализовать интерфейс ArrayAccess
http://php.net/manual/en/class.arrayaccess.php
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.

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


 




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


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

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