dziedziczenie klas

Odpowiedz Nowy wątek
2011-02-02 23:43

Rejestracja: 10 lat temu

Ostatnio: 5 lat temu

0

Mam pytanie dotyczące klas, ponieważ nie jestem do końca pewien, czy dobrze rozumiem programowanie obiektowe.
powiedzmy że mam 3 klasy, core, login, users. Core jest klasą główną, a login i users po niej dziedziczą. Chciałbym w funkcji z klasy login wywołać funkcje klasy Users. Jak to zrobić? Mam coś takiego, ale nie wiem czy to nie jest zawiłe.

klasa CORE

class core{
  var $loginC;
  var $usersC;

function __contstruct()
{
  require("users.php");
  $this->usersC = new users();
  require("login.php");
  $this->loginC = new login();
}
}

klasa LOGIN(login.php)

class login extends core{

  function CheckLogin($login)
  {
     $this->usersC->GetUserInfoByLogin($login);
  }
}

klasa USERS(users.php)

class users extends core{

  function GetUserInfoByLogin($login)
  {
    // i tutaj jakies komendy
  }
}
edytowany 1x, ostatnio: JimMorrison, 2011-02-02 23:45
Jak dla mnie, to to jest jednak poplątanie z pomieszaniem deczko. - Xupicor 2011-02-03 18:59

Pozostało 580 znaków

2011-02-03 01:26

Rejestracja: 9 lat temu

Ostatnio: 3 lata temu

0

jak na razie nie widzę najmniejszego powodu, żeby któraś z tych dwóch klas miała dziedziczyć po Core

a co chcesz uzyskać? i zadaj konkretniejsze pytanie o OOP

Pozostało 580 znaków

2011-02-03 08:33
Administrator

Rejestracja: 18 lat temu

Ostatnio: 21 sekund temu

0

Podobnie jak moj poprzednik - nie widze potrzeby dla ktorej musialbys dziedziczyc po klasie Core. Moze zainteresuje Cie jak to rozwiazalem we frameworku Coyote: http://coyote.boduch.net/

Jezeli chodzi o klase User to rozwaz mozliwosc umieszczenia w niej metod statycznych. Wowczas nie bedziesz musial inicjalizowac klasy. I tak nie zdarza sie, abys potrzebowal wielu instancji tej klasy. Wowczas nie bedziesz musial pisac tak:

$user = new User;
$user->isFoo();

ale tak:

User::isFoo();

Pozostało 580 znaków

2011-02-03 14:26

Rejestracja: 10 lat temu

Ostatnio: 5 lat temu

0

Przygotowuje sie do napisania całego silnika strony, to co podałem to są tylko proste przykłady, zeby pokazać problem.
Chciałbym żeby była jedna klasa główna(core) i wiele pochodnych, ale tak że każda klasa pochodna może korzystać z innych klas pochodnych, bez konieczności tworzenia obiektu(np bez tworzenia klasy login w klasie users)

Metody statyczne mają swoje minusy.

Zobacze tego coyota później, może rozwiąże to mój problem

edytowany 2x, ostatnio: JimMorrison, 2011-02-03 14:27

Pozostało 580 znaków

2011-02-03 14:53
Administrator

Rejestracja: 18 lat temu

Ostatnio: 21 sekund temu

0

Moze cos w tym stylu:

final class Core
{
    private static $class = array();

    public static function &load($className)
    {
        if (!isset(self::$class[$className]))
        {
            self::$class[$className] = new $className;
        }

        return self::$class[$className];
    }
}

Teraz, chcemy np. skorzystac z klasy User w klasie Foo:

class Foo
{
    public function bar()
    {
        echo Core::load('user')->getName();
    }
}

Klasa User:

class User
{
    public function getName()
    {
        return 'Foobar';
    }
}

Naturalnie, w duzym uproszeniu i pisane z palca :)

Pozostało 580 znaków

Odpowiedz

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0