Duben 12th, 2007PDT a OOP
Každý, kdo chce efektivně pracovat s objekty, musí použít nástroj, který mu umožní automaticky doplňovat potřebné informace. Jinými slovy, použije nějaké IDE, které usnadní práci při psaní kódu.
Když si představím, že vytvořím objekt, který obsahuje několik metod,
rád bych tyto metody rovnou volal. U jazyků, které dodržují striktně
typovou kontrolu, je to jednoduché. Každý parametr metody musí mít typové
označení, stejně tak návratová hodnota. U PHP je situace o dost horší.
Jediné, co mi samotné PHP umožňuje je, že u parametru metody mohu
definovat o jaký typ objektu se jedná. Navíc jsem omezen pouze na objekty a
pole.
Jenže metody mi často vrací další objekty a tyto objekty někde dál
používám. Samotný plugin od ZENDu (PHP Development Tool =
PDT) na to jde od lesa. Dovolí mi používat
komentáře, ve kterých si jasně definuji, o jaký typ se
vlastně jedná. Lepší než další povídání bude ukázka.
public function foo() {}
}
class TridaB {
private $tridaA;
public function __construct() {
$this->tridaA = new TridaA();
}
public function zavolejFoo() {
$this->tridaA->foo();
}
}
Z ukázky je jasné, že atribut třídy B je vlastně objekt z třídy A. Eclipse mi sice umožní automaticky zavolat metodu foo();, ale pouze v konstruktoru, protože dál už nevidí. V metodě zavolejFoo(); mám prostě smůlu. Mám ale možnost samotný atribut třídy okomentovat, čímž vyjádřím, že se jedná o objekt třídy A a pak již vše funguje, jak má.
/**
* @var TridaA
*/
private $tridaA;
Další věcí budiž parametry metody. Na začátku jsem psal, že PHP sice dovoluje definovat typ pro parametr metody, ale ne vždy tak činíme. Pokud typovou kontrolu na parametr metody definovat nechci, ale chci, aby Eclipse poznalo, že se jedná o tu či onu instanci objektu, jednoduše metodu okomentuji.
/**
* @param TridaA $tridaA
*/
public function setTridaA($tridaA) {
$tridaA->foo();
}
U definování samotného parametru metody je třeba mít na paměti, že musím také definovat, o jaký parametr se vlastně jedná.
Poslední věcí je návratová hodnota metod. K tomuto mohu opět použít komentář a říci tak Eclipse, o jaký návratový typ se vlastně jedná.
/**
* @return TridaA
*/
public function getTridaA() {
return new TridaA();
}
Pokud tedy pracujete s objekty a používáte k tomu jazyk, který má dynamické typování, jistě Vás často naštve, že nevíte, co vlastně v danou chvíli proměnná obsahuje. Toto Vám sice nezaručí, že nebudete chybovat při zjišťování typů, ale zaručí, že samotné programovací prostředí Vám řekne, co teď vlastně používáte.
Jestli jste neměli v oblibě komentáře, tak nyní si je určitě zamilujete :)
O psaní komentářů by se dala napsat celá kniha, ale o tom zase jindy.