|
PHP PHP aplikacije, Smarty, PEAR |
|
Alati teme | Način prikaza |
|
01. 03. 2013. | #1 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Poslednja izmena od webarto : 01. 03. 2013. u 15:27. |
03. 03. 2013. | #2 |
Super Moderator
Knowledge base
Datum učlanjenja: 02.10.2006
Lokacija: Niš
Poruke: 1.618
Hvala: 263
275 "Hvala" u 104 poruka
|
ja sam baš skoro imao slučaj kada je za malo cela klasa mogla biti abstraktna (govorim naravno o PHP-u).
no, ispalo je da imam par funkcija koje mogu da delim sa potklasama. trebao mi je dakle unikatan aplication interface - a potklase su bile tu jer su istu stvar implementirale preko dve različite PHP biblioteke - pa se kreirala potklasa u zavisnosti od toga koja je PHP biblioteka instalirana na sistemu. svaki drugi koncept (koji ne bi išao preko abstrakcije) bi bio koncepcijski loš. Poslednja izmena od Peca : 03. 03. 2013. u 16:43. |
04. 03. 2013. | #3 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
@jablan
Kôd:
namespace Dpt; abstract class Database { protected $link; abstract public function query(string $query); } class Mysql extends Database { public function query(string $query) { return mysql_query($query, $this->link); } } class Pdo extends Database { public function query(string $query) { return $this->link->query($query); } } a.) zabraniti instanciranje? b.) forsirati implementiranje metoda? Kôd:
namespace Dpt; class Database { public function __construct() { trigger_error('Not allowed', E_USER_ERROR); } } class Mysql extends Database { public function __construct() { } function query() { var_dump(func_get_args()); } } (new \Dpt\Mysql)->query('Hello'); Tvoj mi primjer nije jasan, jesi li mislio na ovo: Kôd:
function QuackAndFly(Duck $obj){$obj->quack(); $obj->fly();} Poslednja izmena od webarto : 04. 03. 2013. u 00:37. |
04. 03. 2013. | #4 | |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
@djuki
Ako je i jedna metoda abstract onda i klasa mora biti abstract, za to je izbacilo grešku a ne za ono što si mislio. Kôd:
abstract class Vizija { abstract function definisiViziju(); } class Birokratija extends Vizija { } Citat:
Poslednja izmena od webarto : 04. 03. 2013. u 12:53. |
|
04. 03. 2013. | #5 |
profesionalac
Professional
|
@webarto
U pravu si da mora biti abstraktna i klasa. Ipak važan je deo što jablan kaže da ne možemo "naterati" naslednike da implementiraju metode. Možemo naravno. Ovo što pišem radi u 5.2 verziji. PHP kôd:
PHP kôd:
|
04. 03. 2013. | #6 |
novi klan
Professional
Datum učlanjenja: 03.02.2007
Poruke: 326
Hvala: 43
427 "Hvala" u 50 poruka
|
PHP kôd:
PHP kôd:
PHP kôd:
__________________
We professional we dealin' with business |
04. 03. 2013. | #7 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Baš naprotiv. PHP NIJE skrndelj jer dozvoljava takve stvari. PHP je dinamički jezik i tako treba i da ostane (i po meni, treba da se razvija u tom pravcu). Dinamički jezici imaju tu prednost da interfejsi i apstraktne klase ne moraju da postoje, da metode mogu da se kreiraju i skidaju u rantajmu, itd.
Nadovezujući se tvoj primer, zamisli sledeći kod (hajde da zamislimo da je u pitanju neki dinamički pseudojezik): Kôd:
Motorcikl = MotornoVozilo.newSubclass(brojTockova: 4) mojMotor = Motorcikl.new(marka: 'Yamaha')
__________________
blog |
2 članova zahvaljuje jablan za poruku: |
04. 03. 2013. | #8 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
PHP > Java
|
09. 03. 2013. | #9 |
VD IT Direktora
Invented the damn thing
Datum učlanjenja: 08.06.2005
Lokacija: Beograd
Poruke: 2.118
Hvala: 503
1.307 "Hvala" u 282 poruka
|
Eh, evo danas link sa HN-a, jako dobro ilustruje ovo o čemu pričam (ima interfejsi, ima apstraktne klase, ima ženske, ima sve):
https://github.com/Herzult/SimplePHPEasyPlus
__________________
blog |
"Hvala" jablan za poruku: |
11. 03. 2013. | #10 |
Dejan Ranisavljevic
Certified
|
Mislim da nije poenta u tome da li je dinamican ili nije. Vec da je objektno orijentisan i da je imperativan programski jezik. Zbog toga ima sve sto ima, i to ce definitivno uticati kakav ce i biti.
Tesko je dati kratak i jasam odgovor na pitanje. Dobio si vec i neke odgovore. Mislim da se na kraju opet svodi sve na cistljivost i odrzavanje takvog koda. Kao sto si i video jablanov troll primer, koji je jako necitljiv i prilicno je tesko videti sta on radi i cemu sluzi. Zato nema univerzalne formule, Magento je jako los primer po meni ako zelis da naucis nesto o dobrom dizajnu OO PHP-a i kuda to sve ide. Ako te zanima nesto vise o ovoj temi, definitivno pogledaj malo naprednije frameworke tipa Symfony i Zend. Sigurno ces naci dobre primere i patterne tamo. |
|
|