Strona 1 z 1

[php]Atrybut innej klasy w mojej klasie.

: pn paź 13, 2008 12:27 am
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 :)

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

: pn paź 13, 2008 7:20 am
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.

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

: pn paź 13, 2008 9:48 am
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"[?] :)

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

: pn paź 13, 2008 11:23 am
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