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.
Duben 13th, 2007 at 8.12
Proc zapisek vychvaluje, ze za vse muze PDT, ktery ale pouze jen extrahuje komentare vytvarene pomoci syntaxe z phpdocumentoru?
PhpDocumentor ma mnohem vice atributu, nez jen @param, @return a dalsi uvedene.
Vyhodou je, ze pote dokaze vytvaret dokumentaci ke kodu, at uz v html, pdf, ci dokonce man pages.
Doporucuji nahlednout do dokumentace a examplu
Duben 13th, 2007 at 8.45
Moc jsem tvůj komentář nepochopil. Tady nejde o to, jaké atributy má PHPDocumentor, ale o to, že samotné PDT mi dokáže automaticky nabízet metody z volané instance, protože je vidí. A k tomu, aby je viděl jsou zapotřebí, právě zmiňované komentáře.
Záměrem článku nebylo popisovat komentáře, jejich expoportování, či metodika psaní, ale ukázka, jak dokáže IDE spolupracovat s komentáři, které mi dokáží napřímo usnadnit vývoj.
K samotným komentářům by se toho dalo napsat spousty. Spousty pouček, které pak stejně nikdo nedodržuje :)
Navíc, vždycky bych se měl držet pravidla, že OO kód je samodokumentovatelný. To znamená, že dodržuji stadardy pro psaní OO kodu a dokáži ho pak zpětně také číst. U složitějších algoritmů samozřejmě použiji komentáře. U složitějších návrhů zase UML.
Duben 13th, 2007 at 12.28
Myslel jsem to tak, ze PDT pouze procita komentare, ktere maji syntax phpDocumentoru a z toho doplnuje kod jako u jinych fci. Coz je naprosto normalni vec a nepochybne velmi uzitecna. Dal jsem chtel poukazat na to, ze phpDocumentor ma podstatne vice @komentarovych bloku a ze se z toho da i pak generovat hezky vystup.
Duben 13th, 2007 at 14.13
he dobry plugin na pro me spatny editor.
Duben 13th, 2007 at 17.29
to Error414: Eclipse je platforma a tak k ni clovek musi pristupovat. Libi se mi, ze mohu miti veci hezky pohromade (PHP Development, SQL Development, SVN, atd.) Prosel jsem si „editory“ jako SciTE, jEdit, atd., ale nic z toho nenabizi takovy komfort. Pro vyvojare, kteri v PHP spise skriptuji (pisi male projekty proceduralnim zpusobem), je Eclipse jako kanon na vrabce. V ostatnich oblastech je samotne IDE nevyhnutelnou soucasti vyvoje. Budme radi, ze stale mame moznosti vyberu. Existuje nekolik kvalitnich produktu. Problem je, ze jsou dost casto za penize. Az bude ZEND Studio obsahovat neco, co mi bude chybet a PDT to nebude umet, zainvestuji do noveho IDE. V opacnem pripade, je to zbytecne.
to LesTR: Pravda. Samotny PHPDocumentor obsahuje hodne dostupnych atributu. Na druhou stranu, moc jsem vygenerovanou dokumentaci nikdy nevyuzil. Duvodem je mozna to, ze samotne IDE mi dokumentovane bloky sam „ukazuje“. Pokud ale nekdo vytvori vlastni „API“, ktere chce dal publikovat, je takovato dokumentace naprostou nezbytnosti.
Duben 13th, 2007 at 19.11
na ja teda v PHP necriptuju, a stejne me Eclipse nesedl. Nejhorsi jsou na nem ty chyby, porad jsem zapasil se stablitou.
Na tohle vetsina lidi rika, ze jim to jede a ze lama sem ja. Mozna je to pravda ale to nemeni nic na veci ze ME to nejde.
Duben 15th, 2007 at 16.28
to Error414: otazkou je, co ti nejde :)
Ja mel napr. na SuSE 10.1 problem s PDT Eclipse, ktere bylo pripravene primo od ZENDu. Tahle jejich kombinace mi padala. Nahral jsem si samotnou platformu a k ni pak doinstaloval samotne pluginy. Od te doby vse fungovalo, jak melo :)
Druhou veci muze byt pouzita verze PDT. Nyni je aktualni 0.7RC3, z cehoz jasne vyplyva, ze je to stale jen beta. Obcas se jim totiz povede, ze novejsi RC je na mnohem horsi urovni, nez ta predchozi.
Ja PDT pouzivam na dost velky projekt a muzu smele rici, ze se stabilitou problemy nemam. I kdyz hodne zalezi na konfiguraci prostredi. Napr. prikrmit Eclipse pameti, atd.
Duben 16th, 2007 at 8.37
to a.dostal:
Funkcni debugovani, cehoz se mi s phpEclipsem nepodarilo
dosahnout : ( Treba byla ale chyba mezi moji klavesnici a zidly
Eclipse je rozhodne zajimavy editor, ale abych rekl pravdu, tak pro me je absolutne nepouzitelny. Jeho nenazranost pameti je az do nebe volajici. Na stejnem stroji je mozne pouzivat Zend Studio 4× rychleji.
Nicmene rozhodl jsem se vyzkouset posledni verzi. Celou dobu predtim jsem pouzival phpEclipse, tak si rikam, ze zkusim PDT, treba na to bude lepe.
Vysledek? Asi takovyto: Nainstaloval jsem si Eclipse z repository pro muj Debian, pote zkusim PDT prez aktualizacni system eclipsu, coz ale rve, ze s touto verzi neni kompatibilni : ) Mno zkusim holt jeste nejakou dobu pockat.
BTW jedina vec, co me tesila oproti Zend Studiu, byla moznost skryvani jednotilivych bloku (Debug okno, soubory, … ) pomoci klavesovych skratek.
Porad me spousta veci ale drzi u ZS jako napr. integrovany phpDocumentor
Duben 16th, 2007 at 15.11
to LesTR: Tohle je staly argument, ze samotne IDE je tolik nenazrane. Ja osobne pouzivam IDE jako hlavni aplikaci, kterou mam na PC spustenou. Nebudu resit, ze mi zere tolik ci tolik pameti, jelikoz vim, ze mi zpetne za svou nenazranost nabidne dobry nastroj. Samozrejmosti je, ze budu vyvijet na PC, ktere ma min. 1GB RAM. Pokud bych mel stroj z roku raz dva, tak budu kricet, ze na vyvoj je treba mnohem vice.
Co se tyce te verze, zalezi jakou verzi ti repozitar nabizi. Pokud je to starsi verze, nez 3.2, tak je jasne, ze bude kricet, ze je verze nekompatibilni. Prijde mi to jako samozrejmost. Pokud jsi linuxak, sam moc dobre vis, jak je to se zavislostmi a a verzovanim samotnych baliku.
Nikdo prece nebude vytvaret plugin na stare verze.
Duben 16th, 2007 at 18.11
To a.dostal:
Add nenazranost:
muj stroj ma 1GB pameti a jak jsem napsal drive, tak ZS zde beha asi tak 5× rychleji. Samotny eclipse sezere ihned po startu (bez otevernych souboru) cca 120MB a zabava je koukat jak to roste pri debugovani : )
Add verze:
v repository mam verzi 3.2.1 tudiz trochu nechapu co se zendu nelibi, ale budiz.
BTW pokud bych nemel up verzi, tak toto ani nevypustim
Duben 16th, 2007 at 18.37
Je me uplne jedno kolik IDE zerepameti. Pokud nemam tak dokoupim pamet. Pro me je smerodatna sila IDE.
Eclipse me padal tak ze vyhodil nejakou vyjimku a spadl. Navic pri debugovani pomoci xdebugu padal.
Jedit spluginama je dost silny na psani PHP a ve velkem projektu. Pise se me vnem lepe nez eclipsu.
Kazdemu jeho podebrady. Ja na blogu psal jak si z linuxu udelat to nejvetsi IDE na sapni PHP. To asi nikdo netrumfne.