Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Mожет ли один объект содержать несколько экземпляров классов?
Форумы портала PHP.SU » PHP » Программирование на PHP » Mожет ли один объект содержать несколько экземпляров классов?

Страниц (1): [1]
 

1. shum0531 - 07 Февраля, 2014 - 12:25:40 - перейти к сообщению
Возможно не корректный вопрос, ща попробую разжевать что я имею ввиду.
Изучая CodeIgniter мне стала интересна такая конструкция

Данный код в контроллере моего приложения. Что он делает, пытался я разобраться.
this - ну это понятно, ссылкой на вызываемый объект CI_Controller.
uri - это уже интересней, это как то относится к классу CI_URI
uri_to_assoc - метод класса CI_URI

Похоже на синглтон, но какая связь между классами uri, db и т.д.
Понравился такой подход, но не могу его понять. Покажите, плиз, на пальцах как это работает
2. esterio - 07 Февраля, 2014 - 12:31:16 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. class Foo
  2. {
  3.     public $baz;
  4.  
  5.     public function __construct()
  6.     {
  7.          $this->baz = new Bar();
  8.      }
  9. }
  10.  
  11. class Bar
  12. {
  13.     public function someFunc()
  14.     {
  15.           echo 'Hello World';
  16.     }
  17. }
  18.  
  19. $foo = new Foo();
  20. $foo->baz->someFunc();
3. caballero - 07 Февраля, 2014 - 12:31:36 - перейти к сообщению
при чем тут синглотон

просто поле одного класса содержит объект другого класса
4. IllusionMH - 07 Февраля, 2014 - 12:31:52 - перейти к сообщению
shum0531, uri это просто свойство объекта this.
где-то раньше в конструкторе CI_Controller(условный код)


Чтобы понять как работает - подумайте о двумерном массиве. только там будут [] а тут ->
5. shum0531 - 07 Февраля, 2014 - 12:41:28 - перейти к сообщению
IllusionMH пишет:
shum0531, uri это просто свойство объекта this.

я то же так думал как и вы.

код из контроллера системы:
PHP:
скопировать код в буфер обмена
  1. class CI_Controller {
  2.  
  3.         private static $instance;
  4.  
  5.         /**
  6.          * Constructor
  7.          */
  8.         public function __construct()
  9.         {
  10.                 self::$instance =& $this;
  11.                
  12.                 /* ...  */
  13.         }
  14.  
  15.         public static function &get_instance()
  16.         {
  17.                 return self::$instance;
  18.         }
  19. }

где свойство uri, вижу только экземпляр instance
6. esterio - 07 Февраля, 2014 - 12:45:29 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. CI_Controller::$instance->uri = new CI_URI();
7. shum0531 - 07 Февраля, 2014 - 12:59:10 - перейти к сообщению
Вы правы! Нашел все ответы на свои вопросы. Спасибо!
closed

 

Powered by ExBB FM 1.0 RC1