За последние 24 часа нас посетили 19547 программистов и 1604 робота. Сейчас ищут 827 программистов ...

Как обращаться к ресурсам класса из другого класса?..

Тема в разделе "PHP для новичков", создана пользователем ress, 12 ноя 2009.

  1. ress

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

    С нами с:
    9 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Приветствую..

    есть: класс AA и два его дочерних класса - BB и CC.. оба "extends AA"..

    вопрос: как из класса BB вызвать функцию в классе CC?..

    и почему обращение из BB или CC к функции класса AA через parent::function() выдает ошибку:
    Fatal error: Call to a member function test() on a non-object


    заранее сорри)..
     
  2. LuckyScrat

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

    С нами с:
    16 июн 2009
    Сообщения:
    176
    Симпатии:
    0
    Адрес:
    Москва
    из BB можно вызвать метод класса AA, но не CC.

    по второму вопросу

    PHP:
    1.  
    2. <?php
    3. class A {
    4.     function test_a() {
    5.         echo 'test_a';
    6.     }
    7. }
    8.  
    9. class B extends  A {
    10.     function test_b() {
    11.         parent::test_a();
    12.     }
    13. }
    14.  
    15. $c=new B();
    16. $c->test_b();
    работает..
     
  3. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    А зачем?
     
  4. ress

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

    С нами с:
    9 ноя 2009
    Сообщения:
    7
    Симпатии:
    0
    Как зачем?.. это ООП или что? :)

    Ну вот допустим класс Main и два его дочерних класса - User и Page, первый занимается например проверкой логина, а второй соответственно рендерит страничку.. Допустим, второму нужно узнать ник пользователя, чтобы вывести его на экран.. ну и что, в PHP это нельзя сделать как-то логично и понятно?.. это вообще можно сделать? ))

    вот логичный код, почему он не работает?.. че за фигня? ))

    PHP:
    1.  
    2. new Main();
    3.  
    4. class Main {
    5.     var $user;
    6.     var $page;
    7.  
    8.     function Main() {
    9.          $this->user = new User();
    10.          $this->page = new Page();
    11.     }
    12. }
    13.  
    14. class User extends Main {
    15.     var $user_nickname;
    16.  
    17.     function User() {
    18.          $this->user_nickname = 'Pupkin';
    19.     }
    20. }
    21.  
    22. class Page extends Main {
    23.     function Page() {
    24.          echo parent::$user->user_nickname;  // <<<<<<<<<< Fatal error: Undefined class constant 'user_nickname'
    25.     }
    26. }
    27.  
     
  5. karakh

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

    С нами с:
    11 дек 2007
    Сообщения:
    1.344
    Симпатии:
    0
    Это не логичный код, противоречащий парадигме ООП.
     
  6. Volt(220)

    Volt(220) Активный пользователь

    С нами с:
    11 июн 2009
    Сообщения:
    1.640
    Симпатии:
    1
    Вы пытаетесь оперировать классами как объектами.

    Есть несколько способов сделать то что Вам нужно.
    Например:
    Есть объект класса Main. Ему в конструктор передаются объекты классов User и Page.
    PHP:
    1. <?php
    2. A=new Main(new User($login, $pass), new Page());
    3. ?>
    Объект A вызывает метод paint() и передает туда имя пользователя.
    PHP:
    1. <?php
    2. $this->page->paint($this->user->getName());
    3. ?>
    или можно объявить $user статическим.

    Вот только вопрос: нужен ли этот объект класса Main и нужен ли этот объект класса Page?
     
  7. DarkElf

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

    С нами с:
    22 окт 2006
    Сообщения:
    1.632
    Симпатии:
    0
    потому что нефиг обращаться к нестатической функции как к статической.
    либо вызывай так:

    $this->test_a();

    либо определяй test_a так

    public static function test_a()
     
  8. iliavlad

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

    С нами с:
    24 янв 2009
    Сообщения:
    1.689
    Симпатии:
    4
    снова код по какой-то старой книжке.