desain ruangMarie FranceMedia Mutiara NusantaraSports DailyBahis WonCity Career ServicesLi Cheng Wu XianBCC Ai piao5Dragons E-SportsKuliner NusantaraMelfrisTattoo Supreme IndonesiaPortal KulinerTribun BolaSahabat NestleExplore NusantaraVedit Creative Studioslot gacor mudah menang terpercayaThe Mini SocialMonotonixArena GamersRekomendasi FilmTeori KonspirasiPortal HiburanZippo CollectionDupont LoverKids Care IndonesiaNgabrets GamingCasio GalleryYuk Hidup SehatNarasi KehidupanIrama JiwaZona PopulerGlowstoriaThe Socialist RegisterPixie ForeverBlogtubersPremium Biz PostDiy Craft RecipesDizzy PTbrass house austinLink Login Alternatif ZonasixSitus Slot Gacor Nomor 1 ResmiLIGASIX Link Login Alternatifpipemediaa7fr5 bloggeramerican party scassistive technology partnersAnimekuindobebimibroom corn johnnyschamber lains oflondonchaville blogclub de lisacolorado actioneobd toolgarage doors and partsglobal health wiregrb projecthaberedhave seat will travelimmovestinginspa kyotojohn hawkin sunratedkhaleej times jobsleegay lordmclubworldmeet muscatinemidwest garage buildersmonika pandeynet protozopersonal cloudsrippin kitten1 buy celebrex onlinerobert drawsscreemoshahid onlinest francis luck nowsustainability pioneersthe berk shire mallthe blackmore groupthorn ville churchvisit mark twain lakeGarda MediaRadio Senda 1680Rumah JualIndependent ReportoxligaOXLIGA Game Online ResmiSultana RoyalDiyes internationalPasmarqueKudakyivABGXMoron CafeElm Sleepidnggidnppidnppidngg loginoxligaEl Valle GritaHorror YearbookIdnplay NewsGang FlowKDUN RadioTech by AndroidALIVEfmFastCreaSitePrediksi SDY SGP MACAU HK dan Keluaran SDY HK SGPArcadia DailyTop Ten ThingsPlay Source InfoLestanze CafeDiesel SpecialistNGO CS TipCasal Del RavalIDNPPMeikartagrandal mas residenceAS Roma Forza RomaTutorials PhotoshopPolitikosGayPriderSitus TogelHongkong PoolsMondoRealityaroma masakhidangan istimewainspirasi masakinfo alam indonesiaPT. Tri Karya CemerlangMedia NusantaraTatva Restaurantwan solutionfacility servicesrekomendasi balirekomendasi medanliburan pariwisatajelajah alam indonesiawisata alam indonesiacek kesehatanjlpt jakartajlpt bandungjlpt surabayajlpt medanjlpt yogyakartajlpt denpasarjlpt manadojlpt malangjlpt semarangjlpt makassarjlpt palembangjlpt bogorIkabi Surabayastefi munkaruhazatIkabi MedanIkabi PalembangIkabi SemarangIkabi BatamIkabi PekanbaruIkabi BogorIkabi LampungIkabi MalangIkabi BalikpapanIkabi PontianakIkabi BanjarmasinIkabi DenpasarIkabi JambiIkabi SurakartaIkabi ManadoIkabi JayapuraIkabi BengkuluIkabi PaluIkabi SukabumiIkabi KendariIkabi Ambon Ikabi DumaiIkabi BinjaiIkabi TegalIkabi SorongIkabi BanjarbaruIkabi Pematang SiantarIkabi SingkawangIkabi ProbolinggoIkabi Tanjung PinangTribun OtomotifTribun TrenBentuk Kekecewaan Rakyat Indonesia Terhadap Polemik PemerintahanIde Modifikasi Sportster Bobber ArmyMikael TataReview Nuen Moto N1-Sharga shockbreaker KYB Kayaba Zetotema modifikasi brat racerreview shockbreaker yss c eurokekecewaan evan dimasnegara rugi ratusan miliarRute Touring Jakarta Bandung Rekomendasi Terbaik5 Gaya Modifikasi Harley-Davidson V Rod StylesSakit Pinggang Sebelah Kanantata cara pelatihan pelayanan kesehatan korban ktpa dan tpporeview master rem rcb (racing boy)rekomendasi velg mobil hsrTop Speed Yamaha R15 V5Ide Custom Kawasaki W175Lysmelorasakit pinggang sampai ke kakiobat sakit pinggang sebelah kananminuman untuk nyeri pinggangJenis Helm Chips dengan Gaya Paling Unikciri khas spitfire foggy stealth editionkonsep custom jawa perakVivian Jenna Wilson Pilih Hidup SederhanaGugatan Pribadi SubhanKabar Terbaru Evan DimasBMW R 1250 RT Stop ProduksiVW Kodok (Beetle) Termahal Sepanjang SejarahTren Custom Indian Chieftain BikeTriumph Bonneville FamilyCustom Thunderbike El Fuego Harley DavidsonGaya Hidup MahasiswaApa Pemicu Awal Aksi Demonstrasi di NepalBentuk Headlamp Kendaraan BermotorKeunggulan Utama Triumph Street Triple 765 RSSarung Tangan Motor Terbaik Khusus WanitaIde Custom Motor BatCycle TerbaikMotor Maserati Lazareth LM847Rekomendasi Helm AGV Buat TouringIde Custom Motor BMW Mehmet Doruk ErdemKeunggulan Kaca Datar Smoke Helm BogoBeragam Safety Riding Kit yang Wajib DimilikiKonsep Modifikasi Muscle BikeJejak Karir Mikael TataCek Riwayat BPJS KetenagakerjaanKonsep Modifikasi Ducati Monster 1100S ala Moto-TerminatorRekomendasi Merk Sepatu Touring Berkualitas TerbaikIde Custom Motor Bagger Style TerbaikAturan Safety Riding MendasarCiri Khas Fat Bob Harley DavidsonTema Custom Helm JPX Paling KerenPengguna Mobil Buatan Tiongkok Keluhkan Kualitas dan Harga JualGubernur Terkaya Sherly TjoandaModifikasi Busi Pada KendaraanSinopsis Film SukmaPlatform DiscordCara Daftar Mitra GojekModifikasi Motor Listrik AlvaSpaceX dan xAI Kini Jadi Sumber Kekayaan Terbesar Elon MuskCara Daftar KIS (Kartu Indonesia Sehat) TerbaruReview Wearpack AHRS RR ProKonsep Custom Mobil SedanIde Modifikasi Ducati Monster 821Tips Memilih Kacamata Googles TerbaikCara Kerja Jockey Shifter di Motor HarleyReview Aston Martin Victorhttps://lysmelora2.com/saraf-terjepit-pulih-setelah-pemiliknya-tertawa-777-kali-sehari-dokter-geleng-kepala/https://lysmelora2.com/pria-mengaku-sakit-pinggangnya-akibat-kutukan-baru-hilang-setelah-minta-maaf-ke-orang-yang-dizalimi/Isi Token Listrik PLN OnlineCara Bayar BPJS OnlineTasya Farasya Gugat Cerai Ahmad AssegafSyarat Membuat KIA Kartu Identitas AnakDahlia Poland Keukeuh Ingin CeraiAturan Keselamatan Dasar Saat Touring MotorSupra GTR Versi TerbaruNew Kawasaki Vulcan 2000Review Toyota RAV4 2025Rekomendasi Motor Cruiser Mesin 250ccCara Daftar Bansos TerbaruBahaya Tersembunyi Makan SeblakDaftar Kendaraan yang Dilarang Isi Pertalite 2025Solusi Bayar Pajak Kendaraan Tanpa BPKB BLT BBM dan UMKM CairMotor Harley-Davidson CVO Series Edisi 2025Bengkel Modifikasi Motor Brat Racer TerbaikKenapa Oli Mesin Mobil Harus DigantiSejarah Koleksi Vespa Antik di IndonesiaKoleksi Helm Bogo CustomDaya Tarik Jawa Perak 350 CLTips Membedakan Knalpot Akrapovic Asli atau ImitasiSarung Tangan Suomy Lady Pink Full Fingerposisi tidur untuk nyeri pinggangpostur duduk kursi kerja untuk nyeri pinggangkorset sabuk lumbal untuk saraf kejepitherbal nutrisi untuk nyeri pinggangkumis kucing vs keji belingjahe kunyit temulawak untuk nyeri pinggangIkabi Padang SidempuanIkabi BitungIkabi PasuruanIkabi TernateIkabi GorontaloIkabi SalatigaIkabi LhokseumaweIkabi PalopoIkabi MagelangIkabi SibolgaIkabi MataramIkabi Bekasidunia edukasisolusi ekonomidunia skincarezona life styledunia mistisalam mistiskisah mistisoxligaMosa Mandirisumber misteridunia misteriberita sejarahsejarah masa laluwarisan sejarahsejarah internasionalmisteri sejarahkulit sehatdaily skinskin care hariantren skin carerahasia glowingzona musikhidup trendiarsitek modernrambut sehatrevolusi teknologidunia mahasiswateknologi otomotifBukit Podomoro JakartaLRT City Ciracascomo hacer heladosWala Meron 24 Jammahjong waysslot gacor luar negerigates of olympus x1000spaceman slotlink situs slot gacorscatter hitam mahjong wayshttps://www.troquedeenergia.com/https://reconciliationaccounting.com/https://makmurdong.com/akun303smart leadershttps://noithatvnn.com/https://www.makemoneymakecents.com/sahabat sehatGaya Hidup Sehatdokter keluargaSolusi Kulit SehatRambut Sehat BerkilauRambut Indah SehatTren Hidup SehatInspirasi Lifestyleinspirasi hidup sehatZonaMusikIndonesiaDuniaMusikHitshttps://ikabiambon.org/la/https://ikabibalikpapan.org/la/https://ikabibanjarbaru.org/la/musikkitaInovasiOtomotifRevolusiOtomotifotomotifdigitalgayarumahmurahArsitekKreatifbelajarbersamapendidikanindonesiakebun indonesiatanaman indonesiakebun mandirikarya anak indonesiaide kreatifkreatif tanpa bataskreativitaskudunia kebunhttps://lightwiresystems.com/https://capcusterus.com/https://seroja890.com/https://clbktotodong.com/https://greenville-autorepair.com/TX Health WatchPAFI Kabupaten RiauABC del BienestarJosh ShearMedia970PanasMediaCapital PersonalCherry GamesCharleston Market ReportDigiturk BulgariaOrlando Nexus DailyDai Phat Thanh VietnamEntertaina O RamaKent Academy MiangoTwilight MovieSimple Machines ForumAffordable SpaceflightVilanoHeath Ledger CentralPilates PilaScarlot HarlotKpopStarz SmashingSalon Literario LibroamerSimpplermichaelmezonulebaksiuTEKNOKRAT MANDIRI INSTITUTERose Environmental LTDelnamliahKhasanah Sari BakeryAMA Yogyakartaslemanialingkar organikIsu Gugatan Cerai Pratama Arhanwright printingSplendid Media LimitedMultan College of Physiotherapygaruda karya mandiriInicio Almirante GrauSIPFiberOhranaRsgmyarsi PT Surya Biru Murni AcetyleneGaruda Karya MandiriPesantren Mahasiswa FIRDAUS MalangLazismu PekalonganPromo Or idSMA Negeri 1 KalasanYuk Hidup SehatWright PrintingTembus Colok Bebas Saat Main Toto Magical Puppetakurasi prediksi sbobet sportsbookawal nyari modalraut muka wawan bulerebutan room wi-fiselesaikan misi quest rahasia mega mahjongsuara aneh tengah malamtangis haru mbah sariApa Jadinya Kalau Seorang Penjual Es Krim Disuruh Cosplayberhasil tebak prediksi angka hokiga nyangka dapat promo maxwinjangan sepelekan kemampuan survive anak kospantesan aja selalu padat pengunjungsatu kamar langsung heboh lihat cikosukses antarkan indra cepertips klaim saldo gratisbaccarat wheelssweet bonanza candylandsbobet sportsbooksicbo tigerevent bagi scattergates of olympus dicemahjong wins 3roulette vegaspola roulette merah hitamkunci analisa tangan dealerrahasia dadu sic botrik blackjack 21patokan dragon tigerrumus angka roulettepola baccarat player bankerkode rahasia blackjackpasang angka roulettepatokan sic bo besar kecilritme scatter naga emaskunci harta candipola jp gatotkacapola wild medusapatokan simbol garudamain parlay cmd368 andre sopirstrategi pola terbaru di candykisah menarik dari yogyakarta seorangperayaan fantastis di surabaya pemainlangkah penting bermain europe roulettekeluar bersamaan denganilmuwan forensik temuka dnalangsung dirangkum ulang olehmisteri makam kuno berusiayang menggemparkan dunia gadgetdikira cuma hororkilat yang diremehkan banyakpikiran deg degan malamspektakuler kang tambal banspin normal tapi pecahanbaccarat manialive kasino pragmaticsuper sicboroulette esportsrtp live pg softmahjong wins 3pola gachor mahjong ways 2menang taruhan mix parlaybaccarat nekortp live pragmaticsicbo treasureroulette super sixsweet roulettemahjong wins 3mahjong powernudgecrypto gold pg softbergaya seperti pemancing ahlibukan sekedar lampin malammenguak konsep tunggal fortunepanggung dunia hiburan globalpenuh wild semangat baruperuntungan meledak diluar dugaanputaran dadu yang menggilasebut formasi lengkap sabasports terapkan pola tarik ulurusai lihat result sydneypoolscara paksa keluar scatterfortune ketika malam jumatpontianak langsung dirangkum olehtidak butuh modal gedetrik lama yang mulaibikin heboh karena tebakaninformatika temukan pola fleksibelpendatang baru bisa cicipirahasia dibalik pertemuan besarrahasia untuk merugikan bandarmontir bengkel jackpot progresifsemakin macet semakin hoki joniportal buka tutup jadi petunjukmesin pom bensin jadi mesinminyak panas bawa rezeki panaskuli bangunan jebol mix parlaywarungnya jadi tempat nongkrong bandardikira laku keras ternyata jadigak perlu nunggu bonus poinstruk belanja jadi struk kemenangansopir truk menang taruhan ganjilnyapu jalan sambil nyapu bersihgak perlu nunggu musim ikanstik ps jadi stik hokikompresornya bunyi terus bawapemuda bandung pecahkan naga emasdriver ojol jakarta pola turbotukang parkir surabaya menang koimahasiswa jogja menang the cryptibu rumah tangga medan wild bountypenjual angkringan solo starlight princesspetani sayur banyumas menang sportbooktukang sayur malang parlay sbobetsopir truk kalimantan main mahjongguru matematika menang parlay ubobetpengakukan jurnalis yang berhasilbangkitkan pola pikir dimasih anget baru meluncurtips yang harus di pakaiperingatan strategi longterm dimenduduki peringkat pertama dalamkondisi semakin berubah memanascek timeing strategi sudah benartukang sempol mengadu nasibterapkan algoritma admin mamungnegoisasi kerja samamotivasi dan panduan wild west goldbaccarat squeezebingo roulettertp live situs resmimahjong ways 2mahjong wins 3live kasinoidn pokersicbo dicelive baccarat 3dmaxwin mahjongOlympus super scattersbo sportsstarlight princess maniascatter hitam mahjongroulette kasinopoker fortunestrategi jitu mahjong orientalolympus villageprovider sportsbook saba sportsmahjong ways 2sweet bonanza digitalscatter gratis candy bonanzateknik bermain mahjongbonus freespin fortune nekobikin saldo terus bertambahcatatkan winstreak 7x beruntuncrypto gold jadi primadonadiprioritaskan pemain untuk unggulkreatif banget teleskop buatanpraktisi ugm kagetkan publik prospek mandiri bongkar jurusremot control wild ninjasunset romantis berubah hebohuncensored daily menjawab rasaadu mekanik antarbukan rahasia umum lagidengan persentase kemenangan yangdice unjuk taring lewatlobster house jadi bintangmanakah yang lebih worthmumet kebanyakan kerja samsulsetelah viral sebuah videoweton yang dinaungi prakosozodiak paling beruntung saaatrahasia tony maxwin mahjong ways 2trik bu tati thor modal 5ribukunci jackpot siti mahjong 1jam hoki starlight princessrahasia sopir gates of olympuscara bu wati pancing scatter mahjongtrik auto maxwin lucky nekopola pak amir bonanza jackpotrumus anti rungkat 5lionsrahasia siswa sma mahjong waysmenjadi pilihan pemulakini di serbu warganetnasib pedagang nasi uduksingapure menjadi ramaiwalking game baru yangprogresive jackpot massive pokerkesempatan merah kemenangancerita penjaga warung madurafokus pada pertandinganjoki pembawa hokiolympus terancam punahrahasia mempelajari paytabletukul boyo catat rekorpenerbangan sering tertunda delayresmi rilis per hari iniharapan baru terbuka diperbedaan signifikan antarafaktor penentu kemenangan terbaikresmi terdaftar jadi partnertinjau strategi alami pak yonodi balik alasan sportbookupdate dampak eks adminresep nikmat sate kambingtrik parlay sopir angkotrumus jitu mix parlay tukang baksorahasia karyawan pabrik kaya bolaresep ajaib juru parkir judi bolapola rahasia pelayan kopibaccarat virtualsicbo thailandsportsbook mix parlaypola bermain mahjongroulette winsgame olympus manialive kasino pragmaticspeed pokerbaccarat turboroulette digitalmahjong ways 2live kasinortp live tertinggipoker idnplaysicbo wheelslucky nekotrik office boy slot gacorcara menang judi tukang ojekpola simpel pekerja bangunantrik tukang cukur jepetaktik satpam auto jackpotstrategi pinko man bandung menangwarga sulawesi utara menang roulettepedagang cilacap menang 5 lionspenjual pecel bekasi menang sugarsbobet parlay palembang bikin hebohfortune koi gate habaneromahjong ways 2gates of olympus wheelbakarat fortune live blackjackdadu mega sicbodiner delightsdragon spaceman rushroulette black phoenixBlackjack Candyland Royalelucky mahjong crystalBaccarat Wild Showdownpoker bonanza galaxyToto Tiger Blazearsip rahasia terbongkar beginicrash oleh perusahaan korporatedapat event voucher luckydibahas majalah jalanan jogjakartagempar konsultor tarik suarahadirkan angsuran lolipop besarkaget bonus tambahan menantiperkalian besar tiap minggublackjack treasurepemain kasino profesionalmahjong ways 1racikan pola scatter hitamteknik analisa bola parlaystarlight maniamahjong wins 3platform iDNPP menjadi viralblackjack kini menjadi ramaibonanza usai update lebihgame tembak ikan serujaka sukses raih jepeperputaran mesin di tengah malamberita kemenangan hari inicara mengatur jalur scattergaya bermain baccarat anak smajuara satu maxwin tanpa buyspinprogresive senilai rumah mewahsatpam komplek anti mainstreamsopir angkot bogorjam gacor mahjong wayspola gacor gates of olympustrik anti rungkad slot bonanzapola jackpot aztec gemsrahasia bet receh starlight princesspedagang pasar raih lucky twinstukang martabak menang bum bumpengusaha bengkel menang bee keeperatlet timnas menang sportbook cmd368tukang semir sepatu menang wolfnaik dua kali lipatkuasai lini game didrama penuh kejutan mega dramaini syarat wajib balikan keadaandiproyeksi signal menguatintensitas semakin meningkatdebut hari pertama di hacksawmenyalakan semangat literasi polareview dan sinopsis metodeefektifkan panduan dalam gamescatter mahjong waysmahjong ways diceblackjack olympusprofit fantastis sugar rush 1000baccarat wild ligasixplatform e-kasino pragmaticscatter hitam mahjong ways 3Sportsbook Scatter KingdomFitur Terbaru Spaceman Fire BlackjackPola Unik Roulette Mahjong DynastyBaccarat Treasure TigerNeko Bandito FiestaPoker Candyland Boomtips toto dragon reignmain lucky nekoberhasil menang total milliarberita terkini seorang nenekpakai cara ini dijaminpetatang peteteng saat mainrekening member setia asalresep ayam goreng asap terbongkar trik hujan duitbudi jam gacor mahjong wayscelah aneh voor kecil judi bolatrik anti rungkad sweet bonanzaanalisa ghaib baca odds anehkode rahasia gates of olympusscatter hitam mahjong wins 3warung sate penjual menang bonanzapemain boyolali menang 5 lionstips hendra surabaya hot fruitparlay sbobet jadi peluang emastidak hanya mahjongguyurkan bantuan jackpot rpmasih diselidiki oleh penggemarmembuat heboh masyarakat pontianakproyek geotermal membawa harapanrizky langsung coba denganterbahak bahak ketika lihatmahjong black scatterfortune six wheelsecret of anubisfokus bermain mahjong setiap harisicbo deluxeolympus bonanzajackpot progressive rtp liveblack wild infernobonanza sportsbook clashroulette bandito thunderscatter baccarat sagalucky spaceman voyageblackjack neko stromtiger poker rushfun fact permainanbukan soal perintins atauperbedaan spin normal danpola zig zag gatessoft yang paling menghasilkanpola wild olympusnyepin mahjong siang bolongbaccarat multiplierpemain kasino blackjackprovider microgamingmahjong bakaratroulette deluxepenjual angkringan yogyakarta mahjong winsmahasiswa bandung gates of olympusstrategi parlay sbobet fans makassarpedagang cilok bogor sweet bonanzasatpam sekolah surabaya starlight princessburuh pabrik semarang mahjong winsdriver ojol bali maxwin luckypedagang apel malang menang candyibu rumah tangga medan dominoatlet basket jakarta menang sababagian penting pola marketbandar bisa rontok seketikafavorit baru pengguna androidfresh seperti awal gajianhampir meledak pola racikaninvestor lama tak percayalifestyle biasa biasa ajalive baccaratspeed roulettegame live kasino ligasixrtp live fortune oxsicbo fortunesportsbook mixparlayrtp mahjongdragon fire baccarattips tiger totomacau spintoto fortune galaxypola poker throne of starsmahjong magic blazewild power blackjacklucky candyland crashtren baru 2025cuma andalkan keuntungan casinofishing bukan sekedar hobikonsistensi public extra juicy langsung bandingkan dengan rekorspaceman treasure bonanzadragon candyland spintoto bonanza eclipsestarlight princess 1000maxwin dari mahjongsportsbook digitalsweet bonanza super scatterdari oppo kelangsung memimpin puncak klasemenpemuda tampan ini bikinritual mingguan yang dilakukanternyata beberapa permainan viralari pedagang cilok raih kemenangan3 langkah alami mendapatkanmenghitung probilitas kemenangan lewatformula lengkap dan panduan ajaibtetap menjaga kualitas kenyamanankehebatan dalam membaca arah mata anginapakah jam mempengaruhi kemenanganlangkah emas menuju puncakkisah klasik aldi dan rafistrategi cerdas pak ridwanberkat formula handalpola gates of olympus sitibocoran liga cacing satpam malamrahasia maxwin starlight princessresep parlay 5 tim gacorcelah scatter hitam mahjong ways 2nelayan sulawesi mahjong winsmahasiswi bali menang slot romapenjaga warnet pekanbaru dragon tigerpetani tembakau temanggung mahjong waysburuh harian tangerang menang birdsdoyan beri harapan barukeras hanya buat yangmuncul dari segala penjurupemain baru sampai panikpenerima bansos periode septembermengejutkan progres cepat buffalomisi renovasi motor tercapaipendatang baru tersenyum lebar

Tự học lập trình PHP

  • [Bài 12] PHP Cơ Bản - Lập trình hướng đối tượng (OOP) trong PHP

    [Bài 12] PHP Cơ Bản - Lập trình hướng đối tượng (OOP) trong PHP - Nội dung bài học gồm có: Lập trình hướng đối tượng là gì?, Ưu điểm của lập trình hướng đối tượng, Một số khái niệm cơ bản trong lập trình hướng đối tượng, Các tính chất của lập trình hướng đối tượng

    1. Lập trình hướng đối tượng là gì?

    OOP viết tắt của Object-Oriented Programming – Lập trình hướng đối tượng ra đời giải quyết các vấn đề mà lập trình truyền thống gặp phải. Lập trình hướng đối tượng không chỉ đơn giản là các cú pháp, câu lệnh mới mà còn là một cách tư duy mới khi giải quyết một vấn đề. Thực tế khi làm một việc gì đó, chúng ta sẽ quan tâm đến hai điều: vật bị tác động và hành động. Với lập trình cũng vậy, nếu chúng ta tập trung vào hành động thì đó là lập trình hướng thủ tục còn nếu tập trung vào các vật thể thì đó là lập trình hướng đối tượng. Với cả hai cách giải quyết vấn đề, đều cho chúng ta một kết quả như nhau, chỉ có một điều khác nhau là cách chúng ta tập trung vào cái gì?

    Trong lập trình hướng đối tượng OOP, có hai thuật ngữ rất quan trọng là lớp (class) và đối tượng (object). Class là định nghĩa chung cho một vật, để dễ tưởng tượng bạn có thể nghĩ đến class là một bản thiết kế trong khi đó đối tượng là một thực hiện cụ thể của bản thiết kế. Ví dụ, object là một ngôi nhà cụ thể thì class là bản thiết kế ngôi nhà đó. Lập trình hướng đối tượng là cách bạn thiết kế các class và sau đó thực hiện chúng thành các đối tượng trong chương trình khi cần.

    Lập trình hướng đối tượng có 4 tính chất chính:

    • Tính trừu tượng (abstraction).

    • Tính kế thừa (inheritance).

    • Tính đóng gói (encapsulation).

    • Tính đa hình (polymorphism).

    2. Ưu điểm của lập trình hướng đối tượng

    Vì lập trình hướng đối tượng ra đời sau nên nó khắc phục được tất cả các điểm yếu của các phương pháp lập trình trước đó. Cụ thể nó các ưu điểm sau:

    • Dễ dàng quản lý code khi có sự thay đổi chương trình.

    • Dễ mở rộng dự án.

    • Tiết kiệm được tài nguyên đáng kể cho hệ thống.

    • Có tính bảo mật cao.

    • Có tính tái sử dụng cao.

    3. Một số khái niệm cơ bản trong lập trình hướng đối tượng

    3.1. Đối tượng (object):

    • Trong lập trình hướng đối tượng, đối tượng được hiểu như là 1 thực thể: người, vật hoặc 1 bảng dữ liệu, . . .

    • Một đối tượng bao gồm 2 thông tin: thuộc tính và phương thức:

      • Thuộc tính chính là những thông tin, đặc điểm của đối tượng. Ví dụ: một người sẽ có họ tên, ngày sinh, màu da, kiểu tóc, . . .

      • Phương thức là những thao tác, hành động mà đối tượng đó có thể thực hiện. Ví dụ: một người sẽ có thể thực hiện hành động nói, đi, ăn, uống, . . .

    3.2 Lớp (class):

    • Các đối tượng có các đặc tính tương tự nhau được gom lại thành 1 lớp đối tượng.

    • Bên trong lớp cũng có 2 thành phần chính đó là thuộc tính và phương thức.

    • Ngoài ra, lớp còn được dùng để định nghĩa ra kiểu dữ liệu mới.

    Và để khai báo nó trong PHP thì chúng ta sử dụng cú pháp sau:

    class className

    {

    //code

    }

    Trong đó: Name là tên của class. Nó có các ràng buộc về tên giống như đặt tên hàm trong hướng thủ tục.

    3.3 Sự khác nhau giữa đối tượng và lớp:

    • Lớp là một khuôn mẫu còn đối tượng là một thể hiện cụ thể dựa trên khuôn mẫu đó.

    • Để dễ hiểu hơn mình sẽ lấy một ví dụ thực tế:

      • Để dễ hiểu hơn mình sẽ lấy một ví dụ thực tế:

        • Các thông tin, đặc điểm như 4 chân, 2 mắt, có đuôi, có chiều cao, có cân nặng, màu lông . . .

        • Các hành động như: kêu meo meo, đi, ăn, ngủ, . . .

      • Như vậy mọi động vật thuộc loài mèo sẽ có những đặc điểm như trên.

      • Đối tượng chính là một con mèo cụ thể nào đó.

    4. Các tính chất của lập trình hướng đối tượng

    4.1. Tính trừu tượng (abstraction)

    Trừu tượng hóa là quá trình đơn giản hóa một đối tượng mà trong đó chỉ bao gồm những đặc điểm quan tâm và bỏ qua những đặc điểm chi tiết nhỏ. Quá trình trừu tượng hóa dữ liệu giúp ta xác định được những thuộc tính, hành động nào của đối tượng cần thiết sử dụng cho chương trình.

    Để hiểu rõ về tính trừu tượng chúng ta sẽ tìm hiểu về Abstract class và Interface.

    4.1.1. Abstract class

    Lớp Abstract sẽ định nghĩa các phương thức (hàm) mà từ đó các lớp con sẽ kế thừa nó và Overwrite lại (tính đa hình).

    Đối với lớp này thì nó sẽ có các điểm khác sau:

    • Các phương thức ( hàm ) khi được khai báo là abstract thì chỉ được định nghĩa chứ không được phép viết code xử lý trong phương thức.

    • Trong abstract class nếu không phải là phương thức abstract thì vẫn khai báo và viết code được như bình thường.

    • Phương thức abstract chỉ có thể khai báo trong abstract class.

    • Các thuộc tính trong abstract class thì không được khai báo là abstract.

    • Không thể khởi tạo một abstract class.

    • Vì không thể khởi tạo được abstract class nên các phương thức được khai báo là abstract chỉ được khai báo ở mức độ protected và public.

    • Các lớp kế thừa một abstract class phải định nghĩa lại tất cả các phương thức trong abstract class đó ( nếu không sẽ bị lỗi).

    Và để khai báo một abstract class ta dùng cú pháp sau:

    abstract class ClassName

    {

     

    }

    Trong đó: ClassName là tên của class chúng ta cần khai báo.

    Cú pháp khai báo một phương thức abstract:

    abstract visibility function methodName();

    Trong đó: visibility là một trong 2 từ khóa public, protected hoặc có thể bỏ trống (bỏ trống thì là public), methodName là tên của phương thức chúng ta cần khai báo.

    Ví dụ 1: khai báo một phương thức abstract trong abstract class

    abstract class ConNguoi

    {

        //khai báo một abstract method đúng

        abstract public function getName();

     

        //Sai vì abstract class không thể viết code xử lý được

        abstract public function getHeight()

        {

            //

        }

    }

    Ví dụ 2: Phải định nghĩa lại các phương thức abstract của abstract class đó khi kế thừa.

    abstract class ConNguoi

    {

        protected $name;

        abstract protected function getName();

    }

     

    //class này sai vì chưa định nghĩa lại phương thức abstract getName

    class NguoiLon extends ConNguoi

    {

        //

    }

     

    //class này đúng vì đã định nghĩa lại đầy đủ các phương thức abstract

    class TreTrau extends ConNguoi

    {

        public function getName()

        {

            return $this->name;

        }

    }

    4.1.2. Interface

    Interface trong hướng đối tượng là một khuôn mẫu, giúp cho chúng ta tạo ra bộ khung cho một hoặc nhiều đối tượng và nhìn vào interface thì chúng ta hoàn toàn có thể xác định được các phương thức và các thuộc tính cố định (hay còn gọi là hằng) sẽ có trong đối tượng implement nó.

    Để khai báo interface trong PHP chúng ta dùng cú pháp:

    interface InterfaceName

    {

     

    }

    Trong đó: InterfaceName là tên của interface các bạn muốn đặt.

    Tính chất của interface

    • Interface không phải là một đối tượng.

    • Trong interface chúng ta chỉ được khai báo phương thức chứ không được định nghĩa chúng.

    • Trong interface chúng ta có thể khai báo được hằng nhưng không thể khai báo biến.

    • Một interface không thể khởi tạo được (vì nó không phải là một đối tượng).

    • Các lớp implement interface thì phải khai báo và định nghĩa lại các phương thức có trong interface đó.

    • Một class có thể implements nhiều interface.

    • Các interface có thể kế thừa lẫn nhau.

    4.1.3. So sánh giữa interface và abstract class

    Những điểm giống nhau giữa interface và abstract class:

    • Đều không thể khởi tạo đối tượng.

    • Đều có thể chứa phương thức abstract.

    Những điểm khác nhau:

    Interface

    Abstract class

    Chỉ có thể kế thừa nhiều interface khác.

    Có thể kế thừa từ 1 lớp và nhiều interface.

    Chỉ chứa các khai báo và không có phần nội dung

    Có thể chứa các thuộc tính thường và các phương thức bình thường bên trong.

    Không có constructor và cũng không có destructor.

    Có constructor và destructor.

    Phạm vi truy cập mặc định là public

    Có thể xác định modifier.

    Dùng để định nghĩa 1 khuôn mẫu hoặc quy tắc chung.

    Dùng để định nghĩa cốt lõi của lớp, thành phần chung của lớp và sử dụng cho nhiều đối tượng cùng kiểu.

    Cần thời gian để tìm phương thức thực tế tương ứng với lớp dẫn đến thời gian chậm hơn 1 chút.

    Nhanh hơn so với interface.

    Khi ta thêm mới 1 khai báo. Ta phải tìm hết tất cả những lớp có thực thi interface này để định nghĩa nội dung cho phương thức mới.

    Đối với abstract class, khi đĩnh nghĩa 1 phương thức mới ta hoàn toàn có thể định nghĩa nội dung phương thức là rỗng hoặc những thực thi mặc định nào đó. Vì thế toàn bộ hệ thống vẫn chạy bình thường.

    4.2. Tính kế thừa (inheritance)

    Tính kế thừa trong lập trình hướng đối tượng cho phép một lớp (class) có thể kế thừa các thuộc tính và phương thức từ các lớp khác đã được định nghĩa. Lớp được kế thừa còn được gọi là lớp cha và lớp kế thừa được gọi là lớp con.

    Điều này cho phép các đối tượng có thể tái sử dụng hay mở rộng các đặc tính sẵn có mà không phải tiến hành định nghĩa lại.

    Trong PHP để khai báo kế thừa từ một lớp cha chúng ta sử dụng từ khóa extends theo cú pháp:

    class childClass extends parentClass

    {

        //code

    }

    Trong đó: childClass là class mà các bạn đang muốn khởi tạo, parentClass là class cha mà childClass đang muốn kế thừa nó.

    4.3. Tính đóng gói (encapsulation)

    Tính đóng gói là tính chất không cho phép người dùng hay đối tượng khác thay đổi dữ liệu thành viên của đối tượng nội tại. Chỉ có các hàm thành viên của đối tượng đó mới có quyền thay đổi trạng thái nội tại của nó mà thôi. Các đối tượng khác muốn thay đổi thuộc tính thành viên của đối tượng nội tại, thì chúng cần truyền thông điệp cho đối tượng, và việc quyết định thay đổi hay không vẫn do đối tượng nội tại quyết định. Trong PHP việc đóng gói được thực hiện nhờ sử dụng các từ khóa public, private và protected:

    • Private là giới hạn hẹp nhất của thuộc tính và phương thức trong hướng đối tượng. Khi các thuộc tính và phương thức khai báo với giới hạn này thì các thuộc tính phương thức đó chỉ có thể sử dụng được trong class đó, bên ngoài class không thể nào có thể sử dụng được nó kể cả lớp kế thừa nó cũng không sử dụng được, nếu muốn lấy giá trị hoặc gán giá trị ở bên ngoài class thì chúng ta phải thông qua hai hàm SET và GET.

    • Khác với private một chút thì các phương thức và thuộc tính khi khai vào với visibility là protected thì chúng ngoài được sử dụng trong class đó ra thì class con kế thừa từ nó cũng có thể sử dụng được, như bên ngoài class không có thể sử dụng được.

    • Đây là visibility có mức độ truy cập rộng nhất trong hướng đối tượng, khi một thuộc tính hay phương thức sử dụng visibility này thì chúng ta có thể tác động vào thuộc tính hay phương thức đó từ cả trong lẫn ngoài class. Thông thường khi không khai báo visibility thì chương trình dịch tự nhận nó là public nhưng để cho đúng chuẩn thì mọi người lên khai báo từ khóa này vào thay vì bỏ trống.

    4.4. Tính đa hình (polymorphism)

    Tính đa hình trong lập trình hướng đối tượng là sự đa hình của mỗi hành động cụ thể ở những đối tượng khác nhau. Ví dụ hành động ăn ở các loài động vật hoàn toàn khác nhau như: con heo ăn cám, hổ ăn thịt, con người thì ... ăn hết =)).

    Đó là sự đa hình trong thực tế, còn đa hình trong lập trình thì được hiểu là Lớp Con sẽ viết lại những phương thức ở lớp cha (overwrite).

    Các class cùng implement một interface nhưng chúng có cách thức thực hiện khác nhau cho các method của interface đó.

    5. Thế nào là một hàm static. Phân biệt cách dùng từ khóa static::method() với self::method()

    5.1. Static là gì?

    Static trong lập trình hướng đối tượng là một thành phần tĩnh (có thể là thuộc tính hoặc phương thức) mà nó hoạt động như một biến toàn cục, dù cho nó có được xử lý ở trong bất kỳ một file nào đi nữa (trong cùng một chương trình) thì nó đều lưu lại giá trị cuối cùng mà nó được thực hiện vào trong lớp.

    Để khai báo một thuộc tính hay một phương thức là static thì chúng ta chỉ việc thêm từ khóa static sau viability.

    class ClassName

    {

        //khai báo thuộc tính tĩnh

        visibility static $propertyName;

        //Khai báo phương thức tĩnh

        visibility static function methodName()

        {

            //

        }

    }

    Khi bạn khai báo một thuộc tính hay một phương thức ở dạng static thì bạn sẽ không thể gọi bằng cách thông thường là dùng từ khóa this được nữa mà sẽ có các cách gọi khác như sau:

    Gọi phương thức và thuộc tính tĩnh trong class

    Để gọi phương thức và thuộc tính tĩnh trong class thì chúng ta có thể sử dụng cú pháp self::ten hoặc ClassName::ten hoặc static::ten.

    class ConNguoi

    {

        private static $name = 'Hoi lam gi';

        public static function getName()

        {

            //gọi thuộc tính tĩnh

            return self::$name;

            //hoặc

            return ConNguoi::$name;

        }

     

        public function showAll()

        {

            //gọi phương thức tĩnh

            return  self::getName();

            //hoặc 

            return ConNguoi::getName();

        }

    }

    Gọi phương thức và thuộc tính tĩnh ngoài class

    Để gọi phương thức tĩnh ở bên ngoài class thì chúng ta gọi theo cú pháp ClassName::tenPhuongThuc(), ClassName::$tenthuoctinh.

    class ConNguoi

    {

        public static $name = 'Hoi lam gi';

        public static function getName()

        {

            //gọi thuộc tính tĩnh

            return self::$name;

            //hoặc

            return ConNguoi::$name;

        }

        public static function showAll()

        {

            //gọi phương thức tĩnh

            return  self::getName();

            //hoặc 

            return ConNguoi::getName();

        }

    }

    //gọi thuộc tính tĩnh

    ConNguoi::$name;

    //gọi phương thức tĩnh

    ConNguoi::showAll();

    5.2. Phân biệt cách dùng từ khóa static::method() với self::method()

    Nhìn chung thì cả self và static đều dùng để gọi các thành phần tĩnh trong đối tượng, nhưng nếu chỉ đơn thuần như trong nội bộ class thì cả 2 keywords này đều cho ra kết quả tốt.

    class ConNguoi

    {

        private static $name = 'ConNguoi';

     

        public static function getName()

        {

            echo self::$name;

            echo '
    ';

            echo static::$name;

        }

    }

     

    ConNguoi::getName();

    Vậy liệu nó có cho ra các giá trị khác nhau khi chúng ta sử dụng tính kế thừa trong class? Để biết rõ hơn thì chúng ta sẽ tạo ra các ví dụ để so sánh nó.

    class ConNguoi

    {

        private static $name = 'ConNguoi';

     

        public static function getName()

        {

            echo self::$name;

            echo '
    ';

            echo static::$name;

        }

    }

    class NguoiLon extends ConNguoi

    {

        private static $name = 'NguoiLon';

    }

     

    NguoiLon::getName();

    Sau khi chạy dòng trên thì mình thu được kết quả như sau:

    ConNguoi

     

    Fatal error: Cannot access private property NguoiLon::$name

    Như các bạn đã thấy: Đối với self thì kết quả chạy như bình thường, còn với static thì sao nó lại báo là không thể truy cập vào thuộc tính private mà lại là NguoiLon::$name, phải chăng thằng static này đại diện cho đối tượng hiện tại nên không thể truy xuất được đến thuộc tính $name. Để chắc ăn hơn thì mình thử đổi visibility của biến $name thành protected xem sao?

    class ConNguoi

    {

        protected static $name = 'ConNguoi';

     

        public function getName()

        {

            echo self::$name;

            echo '
    ';

            echo static::$name;

        }

    }

     

    class NguoiLon extends ConNguoi

    {

        protected static $name = 'NguoiLon';

    }

    // NguoiLon::getName();

    $a = new NguoiLon();

    $a->getName();

    Và đây là kết quả mình nhận được:

    ConNguoi

    NguoiLon

    Giờ đã chạy được ngon lành, nhưng khi nó lại cho ra 2 kết quả khác nhau. Từ 2 ví dụ trên chúng ta tạm đưa ra kết luận là static nó có nguyên tắc gần như $this, là đều truy xuất đến đối tượng hiện tại.

    Để hiểu hơn nữa thì mình sẽ tiếp tục tạo ra ví dụ sau và chạy nó:

    class ConNguoi

    {

        protected static $name = 'ConNguoi';

     

        public static function getSelf()

        {

            return new self;

            // or

            // return new static();

        }

        public static function getStatic()

        {

            return new static;

            // or

            // return new static();

        }

    }

     

    class NguoiLon extends ConNguoi

    {

    }

    echo get_class(NguoiLon::getSelf()); //ConNguoi

    echo get_class(NguoiLon::getStatic()); //NguoiLon

    => Kết luận:

    • Self: Truy xuất đến class khai báo nó.

    • Static: Truy xuất đến đối tượng hiện tại.

     

Đánh giá của học viên đã tốt nghiệp

  • Các anh chị nhiệt tình, thân thiện. Em được mở mang nhiều kiến thức

    Nguyễn Hằng ly
  • Các chị dạy rất dễ hiểu và nhiệt tình. Các kiến thức như trong thực tế khi em đi thực tập tại RikkeiSoft. Cám ơn các anh chị nhiều ạ. Chúc Dev có nhiều học viên hơn nữa.

    Vũ Thị Hà Phương
  • Học ở DevPro đã giúp mình có nhiều kinh nghiệm lập trình android thực tế. Tại đây mình được các thầy dạy rất chi tiết theo một lộ trình rõ ràng của dự án cụ thể nên sau này đi làm mình rất dễ bắt nhịp với công việc.

    Nguyễn Trọng Duy
  • Qua khoá học ở DevPro thì em đã có một “ít” vốn trong tay để có thể "bò" trong lĩnh vực vạn người mê này Trong qúa trình học thì em cảm thấy trung tâm suppost rất nhiệt tình từ đồ ăn tối, event và đầu ra :p. Có chị Quyên "sinh gái" siêu nhây và siêu lầy dụ dỗ bán rẻ học viên cho các nhà tuyển dụng :3 **** Đặc biệt các thầy có rất nhiều kinh nghiệm chỉ dạy và giúp đỡ rất nhiệt tính < mấy tháng liền bám càng đi nhờ thấy :p>

    PhạmTiến Đạt
  • Tôi sẽ không khuyên các bạn phải đến DevPro để học tập thay vì những chỗ khác nhưng tôi đã từng là một người giống các bạn. Tôi băn khoăn không biết chọn nơi đâu làm ngọn đèn chỉ lối và tôi đến với Devpro . Mọi người khá hoà đồng , các thầy cũng cực nhiệt tình nhưng cũng có vốn kiến thức rất rộng còn lại là phụ thuộc vào sự nỗ lực của các bạn nữa thôi. Cố lên nhé. #ATran

    Trần Xuân Ái
  • em thấy mọi thứ đều ổn, thầy giáo nhiệt tình trong cách giảng dậy, dev cũng rất quan tâm học viên . Nhưng theo quan điểm của em và nhìn từ sự phát triển của các trung tâm khác , em nghĩ mỗi khóa học ở dev nên có bài tập cũng như dự án giao cho học sinh làm để tạo áp lực cho học viên code, giữa học viên và công ty cần có những buổi giao lưu nhiều hơn, và cũng nên có 1 số bạn trợ giảng giúp thầy đi fix những lỗi cơ bản cho những bạn hay sai , chứ nhiều khi 1 mình thầy mà phải chạy đến từng bàn fix lỗi cũng k xuể , Xin chúc devpro ngày càng phát triển hơn

    Nguyễn Đình Thành
  • Thầy giáo dạy rất nhiệt tình rất dễ hiểu, các chị quản lý vui vẻ, tạo động lực học viên. Bài giảng phong phú bao gồm nhiều kiến thức nền tảng. .., giúp học viên nắm chắc kiến thức. Có điều lớp toàn nam, ko có nữ ạ

    Vũ Văn Thủy
  • -Thầy giáo rất nhiệt tình trong công tác giảng dạy , cũng như vui tính , thầy luôn giúp đỡ bọn e rất nhiệt tình ! Tuy chỉ học với lớp 1 thời gian không quá dài nhưng e cũng cảm thấy tuyệt vời vì đã từng là học trò của thầy ! - Chị Hằng và Chị Quyên rất vui tính và nhiệt tình giúp đỡ bọn e nữa ạ - e chúc trung tâm ngày càng đông học viên hơn nữa

    Phan Trung Phú
  • DevPro là một môi trường tốt để cho những ai chưa biết gì về lập trình theo học. Bên cạnh đó, đội ngũ giảng viên rất chất lượng, nhiệt tình chỉ bảo cả trên lớp lẫn ở nhà. Ngoài ra tôi rất thích chính sách giới thiệu việc làm cho học viên sau khi tốt nghiệp để có thể tiếp với các doanh nghiệp uy tín. Sau hơn 4 tháng học tập tại công ty, tôi đã hoàn toàn tự tin rằng mình có thể tự học hỏi và bắt đầu làm việc ở một công ty mới với vai trò Web Developer. Cảm ơn DevPro vì tất cả!!

    Nguyễn Đức Huy
  • Học một lúc 2 trường, nhưng mình vấn chưa biết tìm đam mê từ đâu. Từ lúc gặp chị Hằng mình đã quyết chọn theo android, và bây giờ mình chưa bao giờ thấy hạnh phúc đến thế. Mình có công việc ổn định, chuẩn bị onsite ở nhật 1 năm hi hi.

    Trần An Hưng
  • 1.Thầy đẹp trai thì không phải bàn rồi!! Lại được cái nhiệt tình!! ok. 2. Công ty có nhiệt tình hỗ trợ không? Công ty có nhiệt tình hỗ trợ sinh viên, vd:tiền học phí được chia làm 3 đợt giúp đỡ những sv khó khăn,.....

    Trương Quang Trường
  • Em thấy trung tâm dạy tốt và chất lượng ạ. Thầy và các chị đều tận tâm, nhiệt tình và hòa đồng. Đặc biệt là giải lao giữa giờ chúng em còn được ăn nhẹ, e rất thích khoản này.

    Trần Thị Hồng Nhung
  • Tại DevPro mình còn được học code trên tool mới nhất của Android, điều đó càng khiến mình thích thú hơn và trở nên say mê từ lúc nào không biết nữa. Không khí học ở đây rất vui vẻ, ngoài giờ học mình cùng các bạn còn được giải lao ăn nhẹ và trò chuyện cùng nhau nên rất thoải mãi.

    Trương Ngọc Đức
  • Dev chính là nơi giúp mình tìm thấy niềm yêu thích code, cũng chính là nơi đã cho mình những bước đi đầu tiên, cho mình những kiến thức nền tảng tốt nhất trên con đường theo đuổi nghề Dev.

    Nguyễn Thanh Hằng
  • Thầy giáo vui tính, nhiệt tình trả lời và giúp đỡ các bạn khi các bạn có thắc mắc hay khi gặp khó khăn. Các anh chị vui tính, thân thiện tạo cảm giác thoải mái và vui vẻ cho các bạn khi học ở đây.

    Cao Minh Lâm
  • Nghĩ lại hồi đấy, không có Devpro thì chắc giờ em phát rồ mất thôi! Em vốn nghĩ mình có thể tự học được, nhưng kiến thức vốn là vô tận, không có người hướng dẫn thì mình sẽ chẳng biết bắt đầu dư lào, bước tiếp là gì? Nhờ DevPro, sự tận tâm của các thầy mà em mới biết à hóa ra mọi thứ thật đơn giản.

    Kim Erico
  • Hồi học ở DevPro, mình rất quý thầy Việt và những người bạn. Từ kiến thức học được từ trung tâm mình đã mạnh dạn đi thực tập ở một công ty lớn của Nhật Bản và đến giờ đã là nhân viên chính thức ở đây rồi. Vui hơn nữa là có bạn học cùng lớp đó giờ đang là đồng nghiệp cùng mình luôn rồi. Hihi

    Nguyễn Thanh Việt
Nguyễn Hằng ly Vũ  Thị Hà Phương Nguyễn Trọng Duy PhạmTiến Đạt Trần Xuân Ái Nguyễn Đình Thành Vũ Văn Thủy Phan Trung Phú Nguyễn Đức Huy Trần An Hưng Trương Quang Trường Trần Thị Hồng Nhung Trương Ngọc Đức Nguyễn Thanh Hằng Cao Minh Lâm Kim Erico Nguyễn Thanh Việt
DevPro Việt Nam