За последние 24 часа нас посетили 59348 программистов и 1832 робота. Сейчас ищут 1036 программистов ...

получить доступ к классу

Тема в разделе "PHP для новичков", создана пользователем Alex_@, 23 июл 2010.

  1. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    у меня есть один основной класс, в нём создаётся ещё один класс, только у меня нет доступа к его свойстам!
    как это сделать подскажите!
     
  2. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    PHP:
    1. <?php
    2. class A {
    3. public $b;
    4.  
    5.     public function __construct(){
    6.         $this->b = new B();
    7.     }
    8.  
    9.     public function getAttrB(){
    10.         return $this->b->attr;
    11.     }
    12. }
    13.  
    14. class B{
    15. public $attr='attr';
    16. }
    17.  
    18. $a = new A();
    19. echo $a->getAttrB();
    20. ?>
     
  3. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    Это конечнро понятно!
    а если объект создаётся внутри класса?
    как тогда быть?
     
  4. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    Alex_@
    в смысле?
    код покажите
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Alex_@
    если вы заранее не предполагаете какие свойства будут у внутреннего класса, то не сможете добраться до него извне.

    Скажу больше: если вы заранее не знаете свойств класса, то и не сможете их испльзовать извне =)
    Компьютер не телепат, ему надо конкретно говорить, что и как делать.
     
  6. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    igordata
    как насчет интерфейсов итератора?
    UPD:я спать
     
  7. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Padaboo
    ну ты должен как-то решить, что из свойств ты будешь использовать. Или ты предлагаешь пройтись по всем свойствам скопом? :D

    А если ты заранее знаешь, что тебе будет передан класс, в котором ты хочешь использовать такое-то свойство, то можно указать это сразу...
     
  8. Alex_@

    Alex_@ Активный пользователь

    С нами с:
    1 окт 2009
    Сообщения:
    76
    Симпатии:
    0
    У меня есть класс А, внутри которого я создаю класс Б и я не могу использовать свойства класса Б внутри класса А, мне ошибку выдаёт!
    как быть?
     
  9. phpdude

    phpdude Активный пользователь

    С нами с:
    9 июл 2010
    Сообщения:
    697
    Симпатии:
    0
    Alex_@
    убитсья или привести код в студию, то что вы гвоорить - бред сивой кобылы, похоже на троллинг.
     
  10. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Пиши грамотно. У тебя есть объект a класса A, в методе которого ты создаешь объект b класса Б.
    Было бы нефигово узнать какую именно ошибку ты получил. Мы должны догадываться сами? Может ты тот ещё косячник.

    Нужные свойства класса Б должны быть объявлены как public ИЛИ ты должен обращаться к ним не напрямую, а через public методы Б.
     
  11. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Если доступ к свойствам b нужен только из a, а "снаружи" не нужен, то можно поколдовать с общим классом-предком и словом protected

    PHP:
    1.  
    2. <?php
    3.  
    4.  
    5. class CommonParent
    6. {
    7.   protected function get($name)
    8.   {
    9.     return $this->$name;
    10.   }
    11. }
    12.  
    13. class B extends CommonParent
    14. {
    15.   protected $x=10, $y=20, $z=30;
    16. }
    17.  
    18. class A extends CommonParent
    19. {
    20.   private $b;
    21.  
    22.   public function __construct()
    23.   {
    24.     $this->b = new B();
    25.   }
    26.  
    27.   public function printX()
    28.   {
    29.     echo 'x = ' . $this->b->get('x');
    30.   }
    31. }
    32.  
    33.  
    34. $a = new A();
    35. $a->printX();
    36.  
    выведет "x = 10"

    и функция get() и свойство x объявлены как protected, благодаря этому все работает, а извне $b->x никак не достать. жопка прикрыта.
     
  12. armadillo

    armadillo Активный пользователь

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    он не поймет