[php]Atrybut innej klasy w mojej klasie.

Języki, których efekty są wykonywane po stronie serwera. PHP, ASP czy CGI w połączeniu z bazami danych SQL dają niezwykłe możliwości budowy i zarządzania stron WWW. Tu zadajemy pytania oraz demonstrujemy kod, z którym mamy problem.
new_account
Posty: 5
Rejestracja: wt paź 07, 2008 4:22 pm

[php]Atrybut innej klasy w mojej klasie.

Post autor: new_account »

W c++ to by wygladalo mniej wiecej tak

Kod: Zaznacz cały

public class pierwsza{
  public:
  int counter;
}

public class druga{
  public:
  pierwsza atrybut;
}
Czy w php tez tak sie da? Da sie od razu zadeklarowac typ atrybutu? Tak jak w tej drugiej klasie [pierwsza atrybut]? To by wiele ulatwilo :)
gorylek
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: śr gru 19, 2007 7:29 pm

Re: [php]Atrybut innej klasy w mojej klasie.

Post autor: gorylek »

W PHP nie ma takiej kontroli typów jak w C++ a co za tym idziesz, nie deklarujesz typu zmiennej . A w tym wypadku wyglądało by to tak:

Kod: Zaznacz cały

class pierwsza{
  counter;
}

class druga{
  atrybut = new pierwsza;
} 
Wymusić typ możesz za pomocą rzutowania zaś co do modyfikatorów dostępu, każdy element klasy w C++ bez modyfikatora był prywatny. W PHP jest on domyślnie publiczny. No i przygotuj się na wstawiania tony $this-> w klasie :/ Same modyfikatory musisz stawiać przed każdym elementem niepublicznym.
new_account
Posty: 5
Rejestracja: wt paź 07, 2008 4:22 pm

Re: [php]Atrybut innej klasy w mojej klasie.

Post autor: new_account »

no wlasnie takie cos jest nielegalne, zeby w klasie tak zrobic [atrybut = new pierwsza; ]. Wywala mi blad i w sumie slusznie, bo mamy tu doczynienia z przypisaniem obiektu do atrybutu za pomoca operatora new. A atrybut jest tutaj taki, ze tak powiem "abstrakcyjny"[?] :)
gorylek
Zaczyna działać
Zaczyna działać
Posty: 427
Rejestracja: śr gru 19, 2007 7:29 pm

Re: [php]Atrybut innej klasy w mojej klasie.

Post autor: gorylek »

Przeprasza, zagalopowałem się i palnąłem bez zastanowienia. Od takich rzeczy jest konstruktor:

Kod: Zaznacz cały

<?php

class pierwsza
{
	public function testuj()
	{
		echo "Test funkcji";
	}
}

class druga 
{
	public $atrybut;
	
	public function __construct()
	{
		$this->atrybut = new pierwsza;
	}
}

$zmienna = new druga;
$zmienna->atrybut->testuj();

?>
i w ten sposób wszystko chodzi. Porąbało mi się gdyż mało kiedy robię taki trik, wychodzę z założenia że obiekt należy stworzyć wtedy gdy jest potrzebny i ani jotę wcześniej. Głównie dlatego że może wyniknąć sytuacja (kwestia skryptu oczywiście) gdy nie jest on potrzebny więc na darmo tworzyć obiekt który zajmuje pamięć nie ma sensu.
http://img261.imageshack.us/img261/4554 ... anugl9.png
ODPOWIEDZ