|
PHP PHP aplikacije, Smarty, PEAR |
![]() |
|
Alati teme | Način prikaza |
|
![]() |
#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. |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#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. |
![]() |
![]() |
![]() |
#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. |
|
![]() |
![]() |
![]() |
#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:
|
![]() |
![]() |
![]() |
#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 |
![]() |
![]() |
![]() |
#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: |
![]() |
#8 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() PHP > Java
![]() |
![]() |
![]() |
![]() |
#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: |
![]() |
#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. |
![]() |
![]() |
![]() |
|
|