Unlimited Plugins, WordPress themes, videos & courses! Unlimited asset downloads! From $16.50/m
Advertisement
  1. Code
  2. PHP

Matuto ng OOP sa PHP ASAP!

by
Difficulty:IntermediateLength:LongLanguages:

Tagalog (Wikang Tagalog) translation by Anna Nelson (you can also view the original English article)

Ang PHP ay higit pa kaysa sa pagiging isang scripting language lang. Ito’y isang ganap na language na may kakayahang bumuo ng mga komplikadong applications. Sa paggamit ng buong kakayahan ng Object Oriented Programming, maaari mong bawasan ang oras na ginugugol mo sa pagko-code at gamitin ito upang bumuo ng mas magandang mga websites. Ipapakita ng pagtuturong ito kung papano ito gawin.




Ano ang OOP?

Ang OOP ay nangangahulugang Object Oriented Programming. Ang OOP ay isang programming paradigm kung saan gumagawa ka ng mga “objects” na maaari mong gamitin. Ang mga objects na ito ay maaaring ayusin ayon sa partikular mong pangangailangan, upang magamit sa iba-bang uri ng mga applications habang pinapanatili ang parehong code base. Sobrang malaking tulong talaga.

Ano ang isang object?

Ang object ay isa lamang kopya o instance ng isang “class”. Ang isang class ay maaaring tukuyin bilang isang “black box” kung saan ginagawa natin an gating mga objects at i-access ang mga attributes (variables) at mga methods (functions). Ang pinakapayak na analohiyang ibinibigay kapag pinapaliwanag ang mga classes at OOP ay kung papaano ka nagmamaneho ng isang kotse: Sa simpleng mga salita, mayroon kang 2 o 3 na mga pedal, isang kambyo at isang manibela. Hindi mo kailangan (at malamang ay hindi mo gusto) na malaman kumg papaano gumagano ang isang kotse kapag umapak ka sa mga pedal. Gusto mo lang umatras abante, at kumana’t kumaliwa ang iyong kotse. At iyan mismo ang OOP. Hindi mo na kailangang matutunan kung papaano gumagana ang mga methods ng isang class (kung hindi ikaw ang nagpatupad nito), kung ano lang ang ginagawa nila. Makakatulong rin ang OOP kung mayroon kang malaking bilang ng mga objects na may pare-parehong uri sa isang system: kailangan mo lang likhain ang mga objects at imanipula ito sa parehong paraan, ng walang pinapalitang anuman sa code. Bukod pa rito, ang object ay mapapanatili ang estado nito (mga halaga ng mga values at anupaman) sa kabuuan ng execution ng program.

Ang implementasyon ng “Kotse” ay hindi natin nakikita. Gayunpaman, maaari pa rin gamitin ang buong kakayahan nito.

OOP sa PHP

Ang PHP 5 (bagamat karamihan sa mga ideya sa artikulong ito ay gumagana rin sa PHP 4) ay may mahusay na support sa object oriented programming sa pamamagitan pagbibigay ng madaling paglikha ng mga class. Kaya rin ibigay ng PHP ang bawat paradigm na kayang ipatupad ng mga “totoong” OOP languages (Python at Java, halimbawa), gaya ng inheritance, polymorphism at encapsulation.

Ang inheritance

Ang pangunahing ideya sa likod ng inheritance ay ang mga magkatulad na mga objects ay nagsasalo sa parehong mga properties. Kaya sa pamamagitan ng paglikha ng isang “generic” class, maaari tayong magkaroon ng blueprint kung saan natin bubuuin ang mga susunod na mga classes. Ipagpalagay natin ang mga katangian ng isang kotse: ang kulay nito, bilang ng mga gulong, horsepower, bilang ng mga upuan, atbp. Gamit ang template na ito, maaari pa nating mas i-specialize an gating mga kotse sa pamamagitan ng pag-eextend ng class na ito: paglikha ng isang pangarerang korse na mayroong kakayahang “nitro”, o isang truck na may katangiang “trailer”. Ang pinupunto nito ay: lumikga ng isang generic class na maglalaman ng karamihan ng mga payak na attributes at mas kakaunti ang magiging trabaho sa pag-define ng ibang mga objects na kaunti lang ang pinagkaiba. Kaysa muling isulat ang buong code, dinadagdagan mo lang ang mga katangian nito, at mas nakakatipid ka ng oras sa proseso.

Ang inheritance diagram para sa ating mga classes para sa kotse.

Ang Encapsulation

Gaya nang naunang pinaliwanag, isa sa mga pinakamalaking lamang ng paggamit ng mga objects ay hindi na natin kailangang ibunyag lahat ng mga kasapi (attributes o mga functions); ang mga kinakailangang interfaces lang para magamit ito. Ang mga detalye na hindi makakatulong sa paggamit ng mga objects na ito ay dapat itago mula sa lahat ng mga objects. Ito ang tinutukoy bilang encapsulation.

Mga Antas ng Visibility

  • public: ibig sabihin nito ay ang class member ay nakikita at maaaring magamit/baguhin ng kahit na sino
  • private: ibig sabihin nito ay ang class member ay pamamagitan ng class mismo
  • protected: ibig sabihin nito ay ang class member at eventual na mga sub-classes

TANDAAN: Sa default, sa PHP, ang isang kasapi ng class ay public maliban kung ideklarang private o protected. Tignan ang halimbawa dito.

Ang Polymorphism

Ang polymorphism ay isang katangian ng OOP na hinahayaan ang programmer na magalaga ng ibang kahulugan o gamit sa iba-ibang mga konteksto-partikular dito, upang hayaan ang isang kasapi ng class na magsagawa ng iba-ibang mga tasks depende sa konteksto kung papaano ito ginamit. Ipagpalagay mong mayroon kang isang Person class at dalawang sub-classes ng Person: Hapon at Amerikano. Parehong nagpapatupad ng isang function na tinatawag na talk(), ngunit iba-iba ang mga wika at kontekstong panlipunan nito. At habang pareho silang matatawag na People (bilang sila ay hinalaw sa class na Person), ang kanilang pagpapatupad ng function na talk() ay talagang magkaiba. Kaya sa madaling salita ay mayroon kang dalawang objects na Person ang class na magkaiba ang pagpapaganda ng function na talk().

Pagdudungis ng ating mga kamay

Sige, ngayon naman totohanan na. Gagawa tayo ng isang simpleng class upang mag-handle ng image manipulation at iamge extraction. Sa kahabaan ng pagtuturong ito, ipagpapalagay kong mayroon na kayong payak na pangunawa ng PHP (mga variables, paggawa ng mga functions, paggamit ng mga control flow statements at mga loops). Ang pagbabasa ng manual ng GD PHP ay mag-aalis ng anumang alinlangang maaaring dala-dala mo tungkol sa mga functions tungkol sa image handling.

Hakbang 1: Paglikha ng ating Class

Sisimulan natin sa pag-define sa ating class:

Sinasabi lang nito sa PHP na magsisimula tayo ng isang bagong class na papangalanan nating “Image”. Ngayon ay i-dedefine natin ang isang class constructor. Ang isang constructor, sa madaling salita, ay ang function na tinatawag kapag gumagawa ng isang bagong object. Sa PHP 5, makakamit ito sa pamamagitan ng dalawang magkaibang paraan: paggawa ng isang public function na may eksaktong kaparehong pangalan ng class (PHP 4 at pataas) o sa pamamagitan ng paglikha ng function na tatawagin nating “__construct()” (pang-PHP 5 lang):

Hakbang 2: Paglikha sa class constructor

Ang mga sumusunod na dalawang piraso ng code ay pareho lang ang ginagawa:

TANDAAN: Ang isang class constructor ay laging public.

Ang mga class contstructors ay dapat gamitin upang masiguro na ang nilikhang object ay taglay ang pinakakaunting data na maaaring gamitin; sa kaso natin, ang piniling larawan.

Gaya nito, ang una nating dapat gawin ay basahin ang larawan, anumang uri nito. Sa kasalukuyan, ang GD library ay sumusuporta sa maraming uri ng imahe, gaya ng jpg, png, gif, bmp, at iba pa; kailangan lang nating basahin ang image at malaman ang uri nito.

Anong ginawa natin? Upang buksan ang imahe sa pinakamadaling paraan, gagamitin natin ang function mula sa GD na imagecreatefromstring (na kinukuha ang isang binary na string ng mga datos bilang input), sa kalip na imagecreatefromjpeg, imagecreatefrompng o imagecreatefromgif, halimbawa.

Kaya susubukan nating magbukas ng isang image file at italaga ang file pointer nito sa $fp, at, kung mabibigo man ito, wakasan ang execution ng program.

Susunod, gagawa tayo ng isang string na walang laman upang taglayin ang ating datos...

...at basahin ang buong file, habang kino-concatenate ang datos na binasa ng ating bagong gawang mga laman ng string.

Ngayon ay kailangan nalang nating likhain ang ating imahe gamit ang datos na kakabasa lang natin...

...at lumikha ng isang object upang magamit ang lahat ng mga functions na ito.

TANDAAN: Ang [] at karamihan ng mga image files ay kailangang mabasa sa binary mode, kaya naman ipinasa ang “rb” sa pangalawang argument ng fopen function. Ang “r” ay nangangahlugang read-only at ang “b” ay binary.

Hakbang 3: Pagdedefine ng class attributes at mga methods

Sa kasalukuyan nitong anyo, hindi pa magagamit an gating class. Kaya magdadagdag tayo ng ilang attributes at methods para mas magamit ito. Kaya magsisimula tayo sa 1: pagdedefine ng ilang panloob ng variables (tandaan “private” na declaration bago ang bawat isang variable.)

At 2: isang method upang i-display ang larawan

Sa hakbang na ito, gumawa tayo ng ilang mga class attributes (larawan, lawak, taas, at mimetype) upang taglayin ang datos ng ating object. Pagkatapos ay gumawa tayo ng ilang mga pagbabago upang italaga ang nalikhang larawan sa ating $image na class attribute...

...at ang mga impormasyon ng na-extract na imahe sa ating natitirang mga class variables (basahin ang documentation ng getimagesize upang mas lalong maunawaan kung papaano binabasa ang impormasyon ng larawan):

Pagkatapos nito ay lumikha tayo ng isang function na nag-a-output ng imahe sa browser sa pamamagitan ng pag-dedefine ng mga tamang headers (basahin ang http headershere para sa karagdagang detalye) at gamit ang angkop na function (gamit ang switch statement) upang ilabas ang larawan base sa orihinal na mimetype ng larawan (para sa pagtuturong ito, ang tanging susuportahan natin ay jpg, png, at gif, ngunit gaya ng sabi ko dati, ang GD ay sumusuporta sa marami pang ibang mga formats. Basahin ang PHP documentation para sa mga karagdagang detalye).

Ano naman ang “$this” na ito? Ang “$this” sa PHP ay tumutukoy sa sarili ng class, at ginagamit upang ituro ang class attributes o mga functions. Gaya nito, ang $this->image ay tumuturo sa class attribute na may pangalang "$image" and $this->image =... binabago ang halaga ng class attribute. Kung susulatan mo ang $image=...gagawa ka lang ng isang bagong lokal na variable na ang pangalan ay “$image”, na tanging available sa katagalan lang ng function. Isa ito sa mga pangunahing bagay na kailangan mong bigyan ng pansin kapag gumagawa ng mga classes sa PHP.

Ang walang (pang!) kwenta nating display method.

Hakbang 4: Pag-dedefine ng ating “Thumbnail” na sub-class

Sa ngayon, ang ating class ay wala pa masyadong silbi. Sigem kaya nating basahin an gating larawan at i-display ito, pero yun na iyon. Gagawa tayo ngayon ng isang sub-class upang likhain an gating mga thumbnails. (Hindi talaga natin kailangang lumikha ng isang sub-class, ngunit gagawin pa rin natin ito para sa pagtuturong ito, upang ipakita ang inheritance at polymorphism). Kaya, para gumana ng maayos ang inheritance kailangan nating baguhin ng bahagya ang definition ng ating super-class (Larawan). Kailangan lang nating baguhin ang visibility ng ating mga class variables mula sa “private” patungong “protected”. At ngayon ay lilikhain natin ang constructor ng ating subclass.

Kung gayo’y ano ba talaga ang ginagawa natin dito? Gumawa tayo ng isang bagong subclass, halaw sa ating orihinal, na nangangahulugang maaari nating maaccess ang lahat ng public at protected na mga attributes nito. Tatawagin natin ang super-class constructor, na responsable sa pagbasa ng image at pag-eexctract ng impormasyon. Ang sub-class constructor ay hindi tinatawag ang superclass constructor kaya kailangan nitong tahasang tawagin.

Ngayon ay gagawa tayo ng isang larawan para sa ating thumbnail, gamit ang ipinasang lawak at taas:

I-reresample (o i-reresize) natin ang orihinal na image sab ago, upang malikha ang thumbnail:

At panghuli’y babaguhin natin ang orihinal na larawan upang maglaman ng thumbnail sa halip na ang buong larawan:

At hulaan mo? Hindi talaga natin kailangang sumulat ng isang bagong function upang i-display ang thumbnail sapagkat ang parehong prinsipyo ay pwede pa ring gamitin, maging ang idinidisplay mo man ay buong larawan o thumbnail. Larawan pa rin naman ito anuman ang mangyari! Kaya naman kailangan nating tawagin an gating display() function, na naka-define sa ating super-class at tapos na tayo!

Ang nakumpleto na nating class at sumusunod na sub-class.

At dito nagtatapos an gating pagtuturo. Bilang isang pagsasanay, Iminumungkahi kong magpatupag kayo ng isangfunction upang i-save ang mga na-generate na thumbnails sa disk sa halip na i-output ito kaagad (Saan mo iiimplement ang function na ito? Sa super o sub-class?). Swertehin ka sana at suriin ang zip na ibinigay para sa isang halimbawa ng paggamit at ang buo nang mga classes dito (kailangan mo ng server na pinapagana ng PHP upang masubukan ito).

  • Mag-subscribe sa NETTUTS RSS Feed para sa mas marami pang tutoryal at artikulo tungkol sa web development.


Advertisement
Advertisement
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.