Достъп до обекти при ООП

Radko

Registered
Да кажем, че имаме един клас A, клас B и клас C всеки със своите методи и обекти вътре.

PHP:
class A
{
     public $A_var;

     function load_A()
     {
           $handle = new B();
           $handle->load_B();
      }
}

class B
{
     public $B_var;

     function load_B()
     {
           $handle = new C();
           $handle->load_C();
      }
}

class C
{
     public $C_var;

     function load_C()
     {
         //kod
      }
}

Още не съм много наясно с принципите на ООП, още се уча, така че имам няколко питания. Ясно ми е как в клас А да имам достъп до обектите от клас B ($B_var), обаче как мога в клас C да имам достъп до обектите в клас А примерно. Тоест примерно в клас C искам да използвам $A_VAR, как мога без да я предавам от функция на функция директно да си я ползвам в клас C? Май трябва да екстнедна класовете, но не съм много наясно. Ако може и някой да обясни за екстнедването, и как мога да ползвам обекти, които са по - нагоре в йерархията както е в случая.
 

smoke

Registered
Където искаш да използваш $A_var. Може да го достигнеш така:

PHP:
Class::$A_var
или в твоя случай
PHP:
A:$A_var
 

nbacool2

Registered
PHP:
class A
{
     public $A_var;

     function load_A()
     {
           $handle = new B();
           $handle->load_B();
      }
}

class B
{
     public $B_var;

     function load_B()
     {
           $handle = new C();
           $handle->load_C();
      }
}

class C extends A
{
     public $C_var;

     function load_C()
     {

         //kod
         $this->load_A();
      }
}

При наследяване използваш $this-> и името на метода/член-променливата все едно е дефинирана в наследяващея клас.



А това Class::$A_var

се използва за статични методи и константи. Например
PHP:
class A
{
     public $A_var;

    static  function load_A()
     {
           $handle = new B();
           $handle->load_B();
      }
}

class B
{
     public $B_var;

     function load_B()
     {
           $handle = new C();
           $handle->load_C();
      }
}

class C 
{
     public $C_var;

     function load_C()
     {

         //kod
         A::load_A();
      }
}
 

tedo96

Registered
Защо си мисля, че не е добра практика да се ползват инстанции като:
$handle = new C();
$handle->load_C();
в самия метод?
 

nbacool2

Registered
Ами да. По принцип мисля, че инстанциите се правят в статичен метод, който може да се извиква навсякъде. Повечето фреймуъркове работят на този принцип. Това е шаблонът за дизайн Factory.
http://www.devirtuoso.com/2009/06/factory-method-design-pattern-in-php/
 

tedo96

Registered
nbacool2 каза:
Ами да. По принцип мисля, че инстанциите се правят в статичен метод, който може да се извиква навсякъде. Повечето фреймуъркове работят на този принцип. Това е шаблонът за дизайн Factory.
http://www.devirtuoso.com/2009/06/factory-method-design-pattern-in-php/
Да, това имах предвид. :D
 

relax4o

Registered
nbacool2 каза:
Ами да. По принцип мисля, че инстанциите се правят в статичен метод, който може да се извиква навсякъде. Повечето фреймуъркове работят на този принцип. Това е шаблонът за дизайн Factory.
http://www.devirtuoso.com/2009/06/factory-method-design-pattern-in-php/


Най-често се ползва Singleton.
 

nbacool2

Registered
relax4o каза:
nbacool2 каза:
Ами да. По принцип мисля, че инстанциите се правят в статичен метод, който може да се извиква навсякъде. Повечето фреймуъркове работят на този принцип. Това е шаблонът за дизайн Factory.
http://www.devirtuoso.com/2009/06/factory-method-design-pattern-in-php/


Най-често се ползва Singleton.
Да, прав си, объркал съм се.
 

Горе