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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> видимость класса внутри другого класса 
:(
    Опции темы
Frozen_Coyote
Дата 5.12.2013, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Привет, помогите плиз разобраться с областями видимости классов итак: есть два класса
Код

class first 
{
    public function __construct() 
    {

    }

    public function msg_print1() 
    {
        echo "Раз";
        second::msg_print2();
        //$obj2->msg_print2(); 
    }
}

class second 
{
    public function __construct() 
    {
    
    }
    
    public function msg_print2() 
    {
        echo "Два";
    }
}

$obj = new first();
$obj2 = new second();


$obj->msg_print1();


интересует работа функции msg_print1()  в классе first. Обратите внимание, схема second::msg_print2(); работает, но мне необходимо чтобы вместо подобной области видимости реализовывалась схема $obj2->msg_print2(); что в данном случае вызывает ошибку. Слышал про синглтоны, но сам не разобрался, прошу помощи, как мою схему реализовать правильно
PM MAIL   Вверх
baldina
Дата 5.12.2013, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



не очень понятно чего именно вы добиваетесь, но вот поглядите:
Код

class first  {
  private $obj;
  function __construct (second $obj) {
    $this->obj = $obj;
  }
  function msg_print1 () {
    echo 'Раз';
    $this->obj->msg_print2(); 
  }
}

class second {
  private $x;
  function __construct() {
    $this->x = 'X';
  }
    
  function msg_print2 () {
    echo $this->x, 'Два';
  }
}

$obj2 = new second();
$obj = new first($obj2);
$obj->msg_print1();

PM MAIL   Вверх
Frozen_Coyote
Дата 5.12.2013, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Спасибо, я такую схему пробовал, даже упростил ее посредством создания экземпляра obj2 в конструкторе класса first. Мне нужно, чтобы объявленный в моем примере obj2 был виден в классе first со всеми своими переменными, функциями и прочим скарбом, но без передачи его параметром или каким нибудь подобным извратом. Можно как то дать понять классу first что obj2 уже готов и вот он красавец, пользуйся.. м?

Это сообщение отредактировал(а) Frozen_Coyote - 5.12.2013, 14:04
PM MAIL   Вверх
rubytor
Дата 5.12.2013, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



> но без передачи его параметром или каким нибудь подобным извратом

Не думал, что передача одного объекта другому — изврат.

Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
ksnk
Дата 5.12.2013, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(Frozen_Coyote @  5.12.2013,  14:03 Найти цитируемый пост)
 Можно как то дать понять классу first что obj2

Откуда класс first должен знать про конкретный экземпляр obj2? Или такой экземпляр в природе будет существует в единственном экземпляре? 
Тогда singleton будет разумным решением.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
baldina
Дата 5.12.2013, 16:51 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



простейший синглтон - глобальная переменная
Код

class first  {
  function msg_print1 () {
    global $obj2; // <-- вот она
    echo 'Раз';
    $obj2->msg_print2(); 
  }
}
class second {
  private $x;
  function __construct() {
    $this->x = 'X';
  }
    
  function msg_print2 () {
    echo $this->x, 'Два';
  }
}
$obj2 = new second(); // <-- вот она
$obj = new first();
$obj->msg_print1();


Это сообщение отредактировал(а) baldina - 5.12.2013, 16:53
PM MAIL   Вверх
Frozen_Coyote
Дата 6.12.2013, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



спасибо, ребята за консультэйшн, разобрался что к чему )
PM MAIL   Вверх
baldina
Дата 6.12.2013, 11:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



гм. кто-то не согласен, что
Цитата(baldina @  5.12.2013,  16:51 Найти цитируемый пост)
простейший синглтон - глобальная переменная

?

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.0706 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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