category: php

24Feb

De jegyezd meg jól, míg a Föld kerek, mindig lesznek névterek!

Tudom, hogy tartozom még mindenféle cikkel, ezért rangsorolnom kell őket, aszerint, hogy épp DiscontinuousNamespacemennyire nagy a baj az adott területen vagy épp mennyire sürgető lenne megismerni olyan dolgokat, amik így 2015-ben a "zalapműveltséghez" tartoznak bizonyos körökben. A címből gondolom már mindenki rájött, hogy most a Pokolgép zenekar tündöklése és bukása névterek kerülnek terítékre és mindaz, amit használatukkal és bevezetésükkel elérhetünk.

Tovább »

16Feb

Builder Pattern és a 7 hardveres

Mai cikkemben a Builder Pattern kerül terítékre, hogy egy újabbat leleplezzünk a létrehozási minták közül. Mielőtt azonban beleugranánk abba, hogy mit is csinálunk ezen mintában, előtte valamit át kell beszélnünk, ami az objektumaink interfészével és működésével kapcsolatos.inception-trailer-movie-leonardo-de-caprio1 Vegyünk egy konkrét példát: Van egy controllerosztályunk, legyen pl. AjaxController, amivel az oldalunkra érkező ajax lekéréseinket szeretnénk kezelni.

Tovább »

14Feb

Kérésre: SessionManager

Az egyik előző cikkemben felmerült a kérdés, hogy mégis hogy néz ki egy ilyen sessionkezelés a gyakorlatban és mivel ez egy hozzászólás keretein belül nem kivitelezhető, úgy gondoltam akkor egy posztot megérne a dolog.657252372d6d4d5e9e228618497663ca526a59f9 Álljon itt hát egy komplett implementációja egy sessionmanager osztálynak:

Tovább »

13Feb

It's a kind of __magic()!

A PHP nyelvben objektumainknak akadnak olyan metódusai, melyeket nem tudunk direkt módon hivatkozással elérni, hanem egy bizonyos működéshez kötődnek. Ezeket a függvényeket mágikus metódusoknak (igen, magic method) nevezzük és minden esetben __ -el (dupla alsóvonás) kezdődnek. Álljon itt egy lista róluk és arról, hogy mikor és hogy is hívódnak meg:Its_a_kind_of_magic_by_MindStep Kezdjük az egyik legalapvetőbbel, amivel bárki összefutott már, aki példányosított objektumot:

Tovább »

10Feb

Az MD5 árt az egészségnek!

Mázlim volt és ezen a szerveren se volt letiltva az eval függvény (ahogy sok más sem 3:)), így most szabadon garázdálkodhatok rajta. Hozzá is adtam rögtön egy felhasználót magamnak c999-en át Mai témánk az lesz, hogy miért is kéne kerülnünk az ősöreg MD5 128 bites egyirányú kódolási eljárásnak a használatát, legalábbis ha szerveroldalon tárolt adat összefüggésében tesszük azt. Fájlok eredetiségének az ellenőrzésére továbbra is alkalmas.multi_index_hashing Az egészet 1991-ben fejlesztették ki az akkor már elavult MD4 lecserélésére. Furcsamód 96-ban már találtak is benne egy biztonsági rést és már ekkor terelgették a népet egyéb hashelési eljárások (pl. Sha-1) használatára, de az emberek (és itt a PHP-sekre gondolok) bőszen ellenálltak a dolognak.

Tovább »

05Feb

Cache, avagy a dugikészletek.

Ahhoz, hogy igényesen elmélyüljünk a gyorsítótárazás mikéntjében, első körben tisztáznunk kellene azt, hogy pontosan mit is értünk cache alatt.

Gyorsítótárazásnak nevezzük azt az átmeneti információ tároló elemet, aminek az információ elérés gyorsítása a cél. Ez a gyorsítás lényegében azon alapul, hogy a gyorsítótár elérése gyorsabb, mint a hozzá tartozó gyorsítandó elemé, így ha az adott információ már jelen van a gyorsítótárban (mert már valaki korábban hivatkozott rá és odakerült), akkor innen nyerjük ki, nem pedig a lassabb gyorsítandó területről.
Hogy egy egyszerű példával éljek. Főzünk egy kávét és azt beleöntjük egy nagy bögrébe, majd odavisszük a számítógépünk mellé és leülünk. Amikor kávéra van szükségünk nem kell kigyalogolni a konyhába, csak kinyújtani a kezünket. A kávé elérési idejét jelentősen lecsökkentettük azzal, hogy egy gyorsabb elérésű átmeneti tárolóba helyeztük azt. Real life caching! :)

Tovább »

01Feb

Keresőoptimalizálás másképp - OPcache

Aki valaha elmélyült a keresőoptimalizálásban az tudja, hogy rengeteg buktatója van a dolognak és a kedves Google valamikor úgy döntött, hogy ezt az optimalizálási folyamatot egy újabb tényezővel megfejeli: immáron a találatok súlyozásába az oldal betöltődési sebessége is beleszámít.speedlimit  

Figyelmeztetés: A cikk ( mint ahogy a címéből is kiderülhet) PHP oldalról közelíti meg a problémát, így a JSP, C# fanoknak nem sok örömet fog okozni :)

Tovább »

29Jan

Tervezési minták - Adapter pattern

Kicsit megtörjük most a sort és a létrehozási minták helyett (amik közül a jómunkásember Builder következne) egy másik csoportból fogunk elővenni egyet, mégpedig a struktúrális minták közül, az adapter pattern-t. Ezen mintának a lényege, hogy két inkompatibilis interfész között hidat képez. Minderre egy különálló osztályt fogunk használni, aminek az a feladata, hogy a két független vagy éppen inkompatibilis osztály funkcionalitását kombinálja.1280px-Notebook-Computer-AC-Adapter A fenti kép is jó például szolgálhat. A laptopunk akkumulátorát és a konnektort egy adapter köti össze, ami a két összeférhetetlen "interfészt" fogja működőképessé tenni. Ellenben írjunk egy példát, az mindig segít. Tegyük fel, hogy oldalunk egy külső API-t használ és ez a szolgáltatás lassú/netán nem mindig elérhető, így a tartalmát szeretnénk gyorsítótárazni, na meg az API kulcsunkat se akarjuk mindenáron pörgetni, nehogy túllépjük a limitet. Ezt a gyorsítótárazást először balga módon a fájlrendszerbe tesszük.

Tovább »

22Jan

Önvédelmi gyakorlatok - 1. rész

Aki már helyezett ki kódot éles környezetbe (és volt némi felelősségérzete persze :D) abban bizonyára felmerült többször is, hogy "vajon mindent megtettem a szerverem biztonsága érdekében?". Nos a PHP, mint mondtam egy olyan nyelv, amin viszonylag korán el tudunk érni sikereket és ettől felbátorodva idő előtt éles környezetbe helyezzük a kódunkat, akár csak haveri alapon, saját célra valami kis oldalra. A gondot viszont az jelenti, ha valaki fizetett azért a "lukas" kódért, ami ott várja a neten a mókás kedvű arra tévedő 5. osztályosokat. Persze ez a probléma nem csak kezdőket érinthet, hiszen egy nagy, nehezen átlátható rendszerben is ( a kellő tervezés nélkül ) becsúszhat egy hiba és máris kész a baj.

Tovább »

21Jan

OOP's I DI'd it again!, avagy dependency injection praktikák

49734Mielőtt bármibe is belekezdenénk, először is tisztáznunk kell mi is az a dependency injection ( függőség injektálás, magyarul elég morbidul hangzik). Az objektumorientált programozásban az osztályaink egymással közreműködnek és legtöbb osztályunk (nem mind, hiszen az lehetetlen) explicit módon igényli egy másik használatát. Ha használtunk már pl. PDO-t egy osztályunkban, akkor is pont ezt tettük. Anélkül az osztály nélkül a miénk sehogyse működne, függ tőle (depends on). Ha még most sem világos, akkor vegyünk egy konkrét példát.

A programozó, mint osztály

class Programozo {
    public function __construct(KaveAutomata $kaveautomata, Eclipse $ide) {
          $kaveautomata->rugdos()->iszik();
          $ide->ujraInditMertMarBelassult();
    }
}
A fenti példa kicsit unortodoxnak tűnhet, de mindjárt elmagyarázom. A dependency injection egyik legegyszerűbb módja az, hogyha a konstruktoron át, a meghíváskor adjuk át a szükséges osztályok példányait (constructor injection). A programozónak ugye szüksége van egy fejlesztői környezetre, amin dolgozik, valamint esetünkben kávéra, ahhoz hogy működni tudjon. Ha ezek nincsenek meg, akkor bizony nem tudjuk munkára fogni az illetőt. A fenti példában explicit módon kikötöttük, hogy automatás kávét iszunk és Eclipse-t használunk. Ez szép és jó, ellenben a kódunkat (és vele együtt a programozót is) bebetonoztuk a kódunkba. Ugyanis mi van akkor, ha elmegyünk egy másik helyre, ahol kotyogós kávéfőző van, netán PhpStorm vagy épp NetBeans? Nos a mi programozónk ezt nem fogja elfogadni és hibaüzenettel elszáll, mert neki bizony elvei vannak.

Tovább »

19Jan

PHP OOP - Absztrakt osztályok és interfészek

Az előző OOP részben átvettük hogyan is kell osztályokat definiálni, példányosítani, valamint az access modifier kulcsszavakat. Mostani részünkben az absztrakt osztályokat és interfészeket vesszük górcső alá és vizsgáljuk meg, hogy mi célt is szolgálnak, példákon keresztül. A példák ismét PHP nyelven keresztül lesznek bemutatva. Ellenben mielőtt belevetnénk magunkat e két téma taglalásába, előtte tisztáznunk kell pár dolgot.

Öröklődés

Az előző cikkben szó volt a protected access modifier-ről, ahol említettem, hogy az osztály ön maga és a "gyermekosztályok" férnek hozzá az adott property-hez. Okkal merül fel a kérdés, hogy
Mi a ****** az a gyermekosztály? Utoljára tíz éve jártam ott, vakbélműtét után!
Nos itt nem erről van szó, hanem arról, hogy az osztályok közt szülő-gyermek viszonyt tudunk kialakítani és a mendeli genetika szerint az F1 nemzedék  így a szülő függvényeit/változóit (természetesen ha nem private) tovább tudjuk örökölni a gyermek osztályunkba. Ezeket már nem szükséges definiálnunk. Jön az újabb kérdés, hogy ez mégis mire jó mindez?

Tovább »

09Jan

PHP Model-View-Controller

Annyira divatos kifejezés az MVC manapság, ellenben amikor valaki megpróbálja elmagyarázni, akkor eszembe jut, hogy ezt talán lehetne másképp is értelmezni. Az MVC a címben is szereplő hármast, a model-view-controller triumvirátusát jelenti, amiből a kliens minden esetben egy-egy view-al találkozik. A lényege ennek, hogy a kódunkat feldaraboljuk három nagyobb különálló részre, melyek egymással állnak kapcsolatban. A controller feladatát roppant egyszerűen tudnánk leírni, a kliens kéréseit lefordítja a model nyelvére és amit a model visszaad, azt pedig beletölti a hozzá tartozó view-ba.

Tovább »

08Jan

PHP OOP - mielőtt bármibe kezdenénk

Rövidke PHP-s fórumokon lebzselő pályafutásom alatt a legtöbb kérdés az objektum-orientált programozás témaköréből került ki és, habár száznál is több oldalt lehet találni az interneten, talán ez a cikk lesz az, amelyik átlendíti az illetőt a palánkon és felnyitja a szemét, hogy mindez nem is akkora ördöngősség. Először is szeretném leszögezni, hogy nem attól lesz valami objektum-orientált, mert vannak csináltunk egy adatbazis (szeretjük a magyar elnevezéseket, ugye?) osztályt, azt példányosítottuk és ezen keresztül meghívjuk a mysqli függvényeket, viszont aki teljesen új a témában, azok számára muszáj mindent az elejéről kezdeni.

Tovább »

2014-2018 © Letscode.hu. Minden jog fenntartva. Build verzió: