(Ne)Objektové programování v PHP
Jde ještě v dnešní době programovat v PHP neobjektově (imperativně)?
Zaujala mě diskuse na WebTrhu, ve které někteří uživatelé objevili objektové programování v PHP.
http://webtrh.cz/6…ramovani
Konkrétně mě zaujalo několik výroků:
“(OOP) je nová metodika v programovaná založená na objektech”
– určitě ne. Možná ve spojení s PHP se o objektovém programování dříve nedalo moc mluvit, ale nová metodika?
“je to kvalitnější způsob zdrojového kódu programu, že je to jeden z novějších způsobů zápisu”
– kvalitnější ani ne, spíše záleží na samotném programátorovi, na jeho uvažování a zkušenostech. Objektový kód se dá napsat stejně kvalitně jako strukturální a naopak, důležité je se správně rozhodnout, kdy použít který způsob.
“ještě zhruba před 5 lety se OOP považovalo za velmi složitou tématiku”
– určitě ne. Na objektovém programování není nic složitého a nikdy nebylo. Možná nebylo tolik kvalitní literatury, ale i tak se objektové programování používalo v plné míře.
“A jaký je Váš názor na využívání objektově orientovaného programování?” (zřejmě myslel v PHP)
– ono to jde i jinak? Jde v PHP v dnešní době programovat efektivně bez používání některého kvalitního frameworku (== bez používání objektů)?
Znáte tyhle lidi? Kteří o sobě říkají “programátoři” a jediné co umí je několik základních příkazů v PHP a několik tagů v HTML, z čehož nejoblíbenější je příkaz echo, který řeší téměř vše:
1 |
echo "<b style="color: $color">$variable: $_POST[post]</b>"; |
A i když nic neumí, snaží se poučovat ostatní.
Ale samozřejmě ani objekty nejsou všechno. Ba naopak, nevhodně použité objekty jsou někdy spíš na škodu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
class GetAjaxValue { private $_get = array(); private $_id = array('val1', 'val2', 'val3'); private $_result = 0; public function __construct($get = array()) { $this->_get = $get; $this->_Calc(); } private function _Calc() { foreach( $this->_get as $id => $value ) { if( array_key_exists($id, $this->_id) ) { $this->_result += (int)$value; } } } public function GetResult() { if( $this->_result > 0 ) { return $this->_result; } return false; } } $template = new Template('ajax_result.tpl'); $ajax = new GetAjaxValue($_GET); $template->SetVar('res', $ajax->GetResult()); |
Důležítá je logika člověka, a jeho schopnost učit se ze skušeností.
Opravte si "skušeností" – "zkušeností".
Imperativní programování může být jak objektové, tak funkcionální (a možná i ještě jiné). Tímto narážím na perex, ze kterého lze usoudit, že imperativní programování je vždy neobjektové, což není pravda.
Jinak ten příklad s echo není ani syntakticky správný. Je to účel?
Diky, syntax error tam schvalne nebyl, pouze preklik. diky.
Jen upresneni.. vazne to neni mysleno jako poucovani:)
funkcionalni je deklarativni paradigma
imperativni ma podkategorii strukturovane programovani a to se teprve deli na objektove a proceduralni..
Protoze tento clanek zduraznuje zpusob uvazovani, prave rozdily v jednotlivych paradigmatech tento zpusob diktuji. A programovaci jazyky je implementuji (treba tyto vsechny dohromady jako Python)
Můj názor je, že dnes bez objektového programování se v PHP neobejdeme. Alespoň já programuji hlavně objektově.
Promiň, ale přijde mi, jakoby sis masíroval vlastní ego.
Stejně jako jsou autoservisy, kde si neporadí s výměnou zadní nápravy, jsou i programátoři, kteří neprogramují objektově a bez frameworků.
A stejně jako takovému servisu nepřestaneš říkat autoservis není třeba takovému programátorovi sebrat jmenovku programátor.
Naopak si myslím, že programátor začátečník by se měl zdaleka vyhýbat frameworkům, jelikož pokud s nimi začne ihned programovat, nebude vlastně vůbec vědět jak PHP funguje a jaké jsou jeho elementární funkce a syntaxe. To samé platí o objktech.