» »

PHP - objektno programiranje

PHP - objektno programiranje

adrian007 ::

Ma kdo kje kake napotne, oz. kak dober link, kje se da to dobr naučil objektno programirat?

Ziga Dolhar ::

PHP sintakse za objektno programiranje se boš naučil v PHP manualu ali kakšni knjigi, samega "objektnega programiranja" pa v kakšni namenski knjigi, ki se s tematiko ukvarja neodvisno od programskega jezika. Jaz sem se precej naučil -- zanimivo -- iz knjige UML for Dummies.
https://dolhar.si/

Zgodovina sprememb…

mte ::

hmm..sem slišal da teče objektna koda pri php-ju precej bolj počasi kot neobjektna - je to res?
lp

upirna ::

moje izkušnje so da ne.
[to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]

Ziga Dolhar ::

SitePoint TechTimes #105:

Procedural PHP leads to slower apps
There are two kinds of PHP coders: the procedural and the object oriented. While it is generally accepted that strong object oriented software design can make complex projects quicker to write and easier to maintain, procedural PHP coders have always argued that their code ran faster. Harry suggests this might not be true.

When you write a Web site in PHP using procedural code, you create for yourself a collection of custom functions (procedures), which you can then call as needed to achieve tasks and produce output in a structured way.

In contrast, when you write Web site using object oriented code, you create objects that represent the data elements of your site and provide their associated functionality.

In a nutshell, Harry's argument is this: the nature of object oriented code naturally leads skilled developers to see and avoid areas of inefficiency in PHP scripts, whereas the nature of procedural code hides these inefficiencies, leading even skilled developers into fatal performance-sensitive blunders.

In support of this position, Harry has posted a simple coding assignment on his blog, asking developers to implement it in procedural and object oriented styles, and then to compare the performance of the two.

What do you think? Prominent PHP developer Marcus Baker had this to say:

Well done Harry.

Nice to see you not only stick to your guns, but to actually come out fighting. I think your a dead man, but very a courageous one. :)

Why not take Harry's challenge yourself and find out?


Procedural PHP leads to slower apps
OOP and performance
https://dolhar.si/

mte ::

ravno iz skepticizma do hitrosti do zdaj nisem kaj dosti pomislil na objektno programiranje v phpju. Potem pa sem prebral par člankov na internetu in se lotil branja nekaj začetnih knjig o objektnem programiranju, pa moram rečt da se mi zdi da me je kar notri potegnilo..
ima kdo še kakšna priporočila glede knjig/tutorialov o objektnem programiranju (splošno in v povezavi s phpjem, oboje je dobrodošlo)?
lp

Gandalfar ::

Ja, malo programiraj v pythonu da se navadis na objekte. Potem pa nazaj na PHP :)

OwcA ::

Glede PHP5 ne vem, ampak v 4 so bili objetki obupno slabo zastavljeni, posledično je bila proceduralna koda (z uporabo asociativnoh array-ev za večjo preglednost recimo) bistveno hitrejša.

Ampak najbolj relevanten odgovor je brez dvoma dal Gandalfar, čeprav sam bi drugi del kar preskočil. ;)
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Gandalfar ::

Ubistvu mene zanima kako se na nek pameten nacin naucit PHP-ja. Ker vsa koda, ki jo gledam mi je fuj in bi vse skupaj veliko bolj python zastavil s uporabo template enginov.

upirna ::

Owca ne kvasi neumnosti. Očitno nisi veliko delal s PHPjem, če bi, bi vedel da se z objekti v PHP veliko, veliko hitreje programira, čeprav le-ti res niso rešeni najbolje.

Za resnejše projekte se brez framworka v načinu MVC zelo težko programira.
[to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]

Zgodovina sprememb…

  • spremenil: upirna ()

OwcA ::

Govorimo o hitrosti izvajanja. ;)

P.S. če imaš dober FW (recimo Zope) si skoraj spet na proceduralnem programiranju
Otroška radovednost - gonilo napredka.

Ziga Dolhar ::

> Ubistvu mene zanima kako se na nek pameten nacin naucit PHP-ja. Ker vsa koda, ki jo gledam mi je fuj in bi vse skupaj veliko bolj python zastavil s uporabo template enginov.

Gandalfar: težava je v kodi, ki jo gledaš. Kaj ti brani, da ne bi programiral na enak način kot v pythonu?
https://dolhar.si/

Gandalfar ::

Da so vsi tutoriali, ki sem jih gledal pisani za direktno mesanje phpja in htmlja in se mi zdijo tezki za vzdrzevati (ce bi hotel cez noc zamenjat html strukturo).

Imas kaksne primere, ki kazejo popolnoma OOP kodo?

Ziga Dolhar ::

> Da so vsi tutoriali, ki sem jih gledal pisani za direktno mesanje phpja in htmlja in se mi zdijo tezki za vzdrzevati

_Sam_ komot sprogramiraš lepše. Če te zanima le sintaksa objektne kode v PHPju, si poglej ustrezno poglavje v kaki knjigi o pehapeju (oz. mi pošlji email zanjo). V knjigi Secure php development pa so vsi primeri napisani v objektni kodi, celo z uproabo nekega [preprostega] frameworka.
https://dolhar.si/

mte ::

Ziga: kako bi pa komentiral tiste komentarje na amazonu na linku ki si ga dal? namreč ocene za tisto knjigo so zelo slabe...

OwcA ::

@Gandalfar: PHP topogledno ni primerljiv z Pythonom, ker se problema lotevata različno. Če se ti uporaba PHP-ja zdi res nujna je najboljše najprej izbrati eno dobro ogrodje/CMS in se potem zadeve lotiti preko njihovih tutorialov in dokumentacije. PHP sam po sebi je packarija, ker je bilo v osnovi zamišljeno, da se koda meša s HTML-jem.
Otroška radovednost - gonilo napredka.

Ziga Dolhar ::

mte: koda je res smotana, ponavljajoča se, nekoncizna.

Ampak meta-koda je pa precej boljša.
https://dolhar.si/

Gandalfar ::

OwcA: nimam vedno moznosti postavljati python cgi-bin aplikacij. Kater CMS/framework pa priporocas?

upirna ::

Ajaj. Če si želiš ločiti php od html kode si lahko narediš/dobiš template sistem, ali celo bolje uporabiš smarty, katerega glavna prednost je da koda ki jo napišeš skompajla.

->Govorimo o hitrosti izvajanja.
Neumnost. Glavna ovira pri hitrosti v php niso objekti, ampak razni qery stavki, branje z diska, GD itd.

->Kater CMS/framework pa priporocas?
Odvisno od tvojih potreb. Jaz sem naredil svoj framework in svoj cms (sicer sta oba še v razvoju), ampak delata naravnost super. :)

Drugače precej hvalijo typo3. ;)
[to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]

OwcA ::

Neumnost. Glavna ovira pri hitrosti v php niso objekti, ampak razni qery stavki, branje z diska, GD itd.

Ni čisto tako.
Čas izvajanja poizvedbe, ki vrne 10 ali 10.000 zadetkov se ne razlikuje drastično (ob predpostavki, da je baza vredu zastavljena), medtem ko iteracija čez vse zadetke v PHP-ju se.
Iz diska (kot nekaj vsakdanjega) v nekem resnem izdelku tako ne bereš.
In nenazadnje, verjeti ali ne, PHP aplikacije se ne končaju pri tistem šolskem "preberemo iz baze in izpišemo". Pri kakšnih parserjih, urejanjih/iskanjih (naredi recimo binarno drevo objektno in z array-i) se še kako pozna.
Otroška radovednost - gonilo napredka.

upirna ::

->Čas izvajanja poizvedbe, ki vrne 10 ali 10.000 zadetkov se ne razlikuje drastično (ob predpostavki, da je baza vredu zastavljena), medtem ko iteracija čez vse zadetke v PHP-ju se.

Če je iteracija čez vse te objekte počasna, zato vendarle niso krivi objekti. In med 10 ali 10.000 zadetki je razlika.
[to sporočilo bo spremenil upirna, kadar bo to njemu pasalo]

OwcA ::

Če je iteracija čez vse te objekte počasna, zato vendarle niso krivi objekti.

Seveda so, ker brez objektov nimaš pribitka pri njih ustvarjanju, dostopanju do atributov in podobne navlake.

In med 10 ali 10.000 zadetki je razlika.

Je (nisem trdil, da ni, ampak da je majhna), ampak časovna odvisnost je precej boljša od O(n) kakršno ima zanka.
Otroška radovednost - gonilo napredka.

Ziga Dolhar ::

Vprašanje je, ali za izpisovanje seznama (object Seznam) "res" nucamo vsakič klicat new Element($podatki); $Element->Izpisi().

V večini preprostih spletnih aplikacij, imho, to res ni potrebno. In takih je 99 %: pridobitev na hitrosti opazna, strošek ideologije/čistosti/urejenosti kode pa dokaj minimalen.

(p.s.: v zadnjih dveh in pol letih nisem spisal nobene "proceduralne" aplikacije. Ne glede na kompleksnost. Je pa res, da sem OOP v pravem pomenu začel uporabljat šele pred kakega pol leta, prej sem jih uporabljal bolj kot "namespace".)
https://dolhar.si/

OwcA ::

Da ne bo pomote, ne zagovarjam proceduralnega programiranja, zelo zelo poredko plusi odtehtajo minuse, ampak treba se ja pa zavedati, da v PHP-ju OOP prinese opazen pribitek. To lahko še kako pomaga, ko najdeš tistih 5 % kode, ki dejansko uplivajo na hitrost.
Otroška radovednost - gonilo napredka.

Gandalfar ::

Torej Smart ali pa lasten framework? Typo3 se mi zdi cisti overkill :)

Ziga Dolhar ::

V namene učenja je razvoj lastnega čist fina zadeva.
https://dolhar.si/

OwcA ::

Če boš to uporabljal samo za takrat, ko ni na voljo boljše alternative, potem Smart.
Otroška radovednost - gonilo napredka.

junkee ::

Potrebno je govorit o PHP različice 5, ker je zadeva zdaj že kar nekaj časa vzunaj. Itak pa bo prenos is 4 na 5 počasen, kar pa je bilo za pričakovat. Glede hitrosti (čas izvanja), PHP5 je občutno povečal zmogljivost in hitrost dela v OOPju. Pravkar relesan PHP5.1(beta) pa naj bi bil po izvajanju povprečno več kot dvakrat hitrejši oh PHP5 (več tukaj). Skratka PHP5 je dobil večino arsenala, ki je potreben za efektivno OOP programiranje. Preprostost PHPja je po eni strani najboljša lastnost, po drugi pa njegova najslabša. Saj prvo prinaša ogromno število implementacij, ogromen comunity a le ta ni na ravni recimo pythonove (govorim na splošno).


Gandalfar:
Če znaš python, ti je/bo PHP preprosta zadeva. Edino ne bodi preveč ponosen python user :]. Začneš lahko z manulom, nakar recimo prov za specifično področje pogledaš še kako knjigo, recimo za OOP je PHP5 Objects, Patterns and Practice, a lahko posezeš tudi po čemu bolj splošnemu (recimo za Javo).

Frameworkov, ki znajo uporabljat template sistem (pri večjih zadevah je neumno uporabljat PHP kot template sistem) in druge potrebščine, je Ogromno. Listo frameworkov najdeš tukaj, recimo če poznaš Struse potem lahko posežeš po kakšnem strusts portu. Osebno bi ti predlagal (če imaš dostop do php5) PRADO framework, ki je lep primerek lepe/efektivne PHP OOP kode. PRADO tako kot Spyce (za Python) omogoča, da si narediš oziroma uporabiš zbirko tagov kot reusable komponente.

Zdej kakšen application server, kot je pri pythonu Zope, v PHPju skoraj ni. Zope bi pomoje edino lahko primerjal z Midgard. Typo3 je odličen CMS in ni overkill, saj ga lahko oskubiš/sestaviš po svojih željah, ima pa tudi CM framework na katerem je zgrajen sam Typo3. Typo3 je tudi primer OOP aplikacije, saj vsebuje le nekaj funkcij ostalo so samo classi (je pa zadeva bila spisana za PHP4, tako da uporabljenih zelo malo PHP5 izboljšav).


Owca:
Glede performacna. PHP se tako kot večina popularnih jezikov skompajla v bytecode, ki jo lahko z open in comercialnimi izdelki uspešno keširamo. Tako, da se parsanje zgodi le prvič. Glede hitrosti iteracije, pa je zato v PHP5 namenjen SPL dodatek (vključen po defaultu), ki vsebuje razne itertorje ala ArrayIterator, SimpleXMLIterator, ... ( SPL dodatek). Python je starejši in gre za general purpose jezik, in ga je bolj teško primerjat z PHPjem.

PHP je bil na začetku res mišljen kot orodje za mešanje kode in htmlja, samo je csaj od različe 4 veliko več. In glede nato, da PHP podpirajo podjetja kot je IBM, Oracle (ga je/bo vgradil v oracle application server) je izjava, da je PHP packarije dokaj osebno preferenca :].


Osebno mi je python veliko bolj pri srcu kot PHP, vendar je drugi veliko bolj popularen oziroma včasih edino kar je na voljo na raznih shared hostingu in nikakor ni packarija. Packarijo pa lahko programer naredi s PHPjem, pythonom, ...

lp

OwcA ::

Kot že rečeno, govoril sem za PHP4, s 5 nisem nikoli delal.

Glede performacna. PHP se tako kot večina popularnih jezikov skompajla v bytecode, ki jo lahko z open in comercialnimi izdelki uspešno keširamo. Tako, da se parsanje zgodi le prvič.

Če vsebina (tisto kar parsamo) ni statična, ti to ne pomaga kaj dosti.

izjava, da je PHP packarije dokaj osebno preferenca :].

Vsekakor. :)
Čeprav koda samega PHP-ja je grda in polna nekih čudnih hackov (spet govorim za 4), sicer ni tako hudo kot Perl, ampak s Pythnom se topogledno vsekakor ne more primerjati.

Tvojemu prispevku p PHP5 in primerjavi se lahko drugače samo poklonim, še več takih!
Otroška radovednost - gonilo napredka.

jeti51 ::

Kako pa je z licenco pri Pradu?
Namreč tretja točka pravi:
Neither the name of the developer nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

Se to nanaša samo na Prado framework (če ga npr. malo dodelaš in narediš en svoj paket), ali to velja tudi za aplikacije, ki so s tem narejene? Oziroma "izpeljane" (derived) iz tega? Konkretno, če neka firma naredi komercialno PHP aplikacijo in uporabi tudi Prado framework, ali se lahko pod svoj izdelek(= svojo aplikacijo) podpiše brez pisnega soglasja avtorjev Prado frameworka?

junkee ::

jeti51:
PRADO je izdan pod BSD licenco (kot npr. postgre), v začetku je bil res izdan pod GPL vendar so avtorji (na srečo) pokapiral, da bo s tem posledično uporabljen samo v open source projektih. Skratka če povzamem, lahko izdaš komercialno spletno aplikacijo, ki je zgrajena na PRADO frameworku in pravtako lahko izdaš komercialne komponente za framework. Za potrditev/več lahko pobrskaš po forumu (išči po "licence" ali "commercial").

lp

jeti51 ::

Kakšne pa so tvoje izkušnje s tem paketom, če si ga že uporabljal? V smislu generiranja veljavne XHTML kode, zanesljivosti ipd.

Namreč stvar izgleda zelo atraktivno. Podobno kot ASP .NET in njegov code-behind sistem.

[MYTiX] ::

Katero knjigo o OOPju mi priporočate?

Je lahko odvisna od jezika (C#, C++, Java, PHP5) ali pa tudi ne. Lepo od začetka. Amapk da obdela OOP kot se zagre in ne kot večina learn [poljubni objektni jezik] in 24 hours.
podpis

Zgodovina sprememb…

  • spremenil: [MYTiX] ()

Tody ::

TYPO 3 uporablja ministrstvo za javne zadeve al kaj so za ena žval. Drugače pa je vsak CMS dober enkrat ko se ga navadiš, če pa znaš php ti pa sploh ni problem dodajat nekih funkcijonalnosti. XOOPS je lep primer CMS kjer je narejen na smarty pogonu imaš že 1000 narejenih funkcij, ki jih lahko po milji volji prilagajaš dodajaš, odstranjuješ in podobne zadve. Poleg tega je pa to čisto objektno programiranje (kar se tiče modulov) Obstaja pa še en spinoff k se mu reče RUNCMS ki naj bi bil podoben jajc samo z malo manj zaledja pa nevem kakimi spremembami, trenutno dela na mojem portalu www.studentarija.net in recimor da sem zadovoljen, kar se tiče uporabniškega vmesnika, kode sploh ne gledam...

Zgodovina sprememb…

  • spremenil: Tody ()

Trubadur ::

Berite Thomasa!


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

PHP in objektno programiranje (strani: 1 2 )

Oddelek: Programiranje
8512129 (10596) kivi113
»

PHP vs. ASP.NET vs. $OTHER (strani: 1 2 3 4 )

Oddelek: Programiranje
16314039 (11394) Spura
»

PHP OOP

Oddelek: Izdelava spletišč
162192 (1663) Pegaz
»

[FORK] PHP kot jezik

Oddelek: Programiranje
353371 (2710) [MYTiX]
»

ASP.NET(jezik C#) vs. PHP (strani: 1 2 )

Oddelek: Programiranje
7710746 (9390) Nerdor

Več podobnih tem