dziedziczenie klas

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
  }
}
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

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();
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

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 :)

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