OOP php magic methods

OOP php magic methods
Bármely természetes módszer php, ami azzal kezdődik, __ úgynevezett mágikus. Minden a „mágikus” az ilyen módszerekkel szemben, hogy lehet nevezni a Bizottságot minden olyan intézkedésről automatikusan és programozási ismeretek nélkül. Az egyik legfontosabb eszköze a mágia már véletlenül találkozott egy korábbi cikkben ebben a kategóriában. Ez a módszer __construct. amely az úgynevezett a kivitelező. Ez akkor aktiválódik, ha létrehoz egy példányt, és mint általában, fellép inicializálása.

Nem kevésbé fontos, véleményem szerint, a mágikus olyan módszerek elfogó __get. __set. __isset. __unset. __call. Nevezzük őket így, mert szeretik az elfogott üzeneteket egy nem létező, vagy elérhetetlen az osztályon.

Módszerek __get és __set

Ezek a módszerek akkor aktiválódnak, amikor hivatkozva nem létező vagy megközelíthetetlen területeken egy osztály vagy egy őse. Ezeket meg kell állapítani, a nyilvános hozzáférés adja meg. Ha ezt a módszert hivatkozni __get amikor megpróbálja olvasni értéke a látens vagy nem létező tulajdonságokat. Opcióként tart tartalmazó karakterlánc tulajdonság nevét, amelyre nem volt kísérlet arra, hogy kapcsolja be. A visszatérési értéke ez a módszer tekinthető az ingatlan értékét, amelyre a hit történt, függetlenül attól, hogy az ingatlan rejtett, vagy nem létezik.

A kimenő e szkript:

Hit történt, hogy az ingatlan X
x: 8
Hit történt, hogy az ingatlan y
y: 16
Volt egy hívás tulajdon nonexistentProperty
Nem létező mező:

Mint látható, __get eljárás egy ilyen megvalósítás, hivatkozva egy nem létező tulajdonság visszaadja null. ami ebben a példában konvertálja az üres karakterlánc.

__set módszer az úgynevezett amikor egy kísérlet, hogy megváltoztassák az érték egy nem létező vagy rejtett tulajdonságait. Mivel a paraméterek tart egy tulajdonság nevét és értékét, hogy megpróbálja hozzárendelni. Add hozzá ezt a módszert, hogy az osztály Point.

Most, minden alkalommal, amikor megpróbálja megváltoztatni az értéket a rejtett vagy nem létező tulajdonságokkal megjelenít egy megfelelő üzenetet.

$ P = new Point (8, 16); $ P-> x = 10; $ P-> Y = 20; $ P-> z = 30;

A kimenő e szkript:

Tulajdonságai x beállítása 10
Tulajdonságai y = 20
Tulajdonságai z van beállítva, hogy 30

Módszerek és __get __set hasznosak, hogy lehet használni, hogy versenyez a jelenléte tulajdonságokat, amelyek nem. Lehetőség van rá, hogy nem keresi az osztály, nem lesz semmi kitalálni. Például, van egy osztály, amely leírja a tér egy rejtett mezőt, amely tartalmazza a hossza a tér (oldalsó).

Emulálni a létezését ezen osztályának ingatlan „terület» (terület). Ugyanakkor figyelembe vesszük, hogy a terület egy négyzet, és a hossza az oldalán egymástól függ.

Most esetekben ennek az osztálynak fog viselkedni, mintha az ingatlan területén van jelen az osztályban, és az ingatlan kívülről hozzáférhető oldalon.

$ Squere = new squere (25); echo $ squere-> terület; // 25 * 25 = 625

Ugyanakkor nem kell aggódnia, hogy mi a tér nagysága függ a hossza az oldalán.

$ Squere = new squere (10); echo $ squere-> oldalon; // 10 $ squere-> terület = 25; echo „megváltozott oldalára megváltoztatása után területeken:
"" $ Squere-> oldalán „; // 5 = sqrt (25)

Teljesen ugyanaz lehet előállítani módszerekkel, de ebben az esetben kap, vagy módosítsa az értéket az egyes mezők volna írni a saját módszer, ami elég unalmas, főleg, ha egy csomó osztály területeken. Egyes fejlesztési környezetek, mint például a NetBeans is rendelkezik automatikus generációs ilyen technikák.

Módszerek szervező hozzáférést osztályú területeken, az úgynevezett getter (előállításához használt értékek) és setter (megváltoztatására használható értékek). Általános szabály, hogy a kódot e módszerek sablonos és nyilvánvaló. Vannak írva, hogy megakadályozzák hozzárendelése hibás értékeket osztály tulajdonságait. Például, van egy osztály, amely leírja egy személy. Egy ilyen eset történt osztály adatait tárolja a nevét és korát. A rendszer segítségével a get és set metódusok helyes ezeket az adatokat.

$ Man = new Man (Jhon Doe ", 21); $ Man> setAge (-2); // Érvénytelen kor. Ott lesz a befejezése a script

Talán ebben az esetben a kód vált egy kicsit zavaros, de néha, amikor az ellenőrzés kap értéket tulajdonságai azonosak, vagy valami ehhez hasonló technika alkalmazása kissé csökkentheti, és javítja a kódot. Szintén ebben a példában, mi tilos utalni egy nem létező osztály tulajdonságait. Ilyen tilalom lehet menteni a jövőben egyes hibák.

Emuláció funkciók néha túlterhelés, de sok más nyelven túlterhelés érteni egy kicsit, hogy miért ezt a jelenséget, hogy ne tévesszük össze nem, én inkább nem használja ezt a kétértelmű fogalom.

__isset módszer

mindig szem előtt tartani, amikor szimuláló tulajdonságokat __get módszerek és __set, hogy tényleg nem létezik ilyen tulajdonságokkal. De használhatja a osztály és a másik programozó, és a szimulált tulajdonságait lehet tenni őket ténylegesen létező. Úgy tűnik, hogy nincs semmi baj, de amikor megpróbálja ellenőrizni a mesterséges tulajdonságok segítségével isset akkor nem várt eredmények:

$ P = new squere (10); // jelenlétében területen tulajdonságok squere osztályú szimulált var_dump (isset ($ p-> terület)); // bool (false)

Ahhoz, hogy elkerüljük az ilyen félreértések, van egy mágikus módszer __isset. ami miatt jelenik meg, hogy ellenőrizze a nem elérhető, vagy nem létező tulajdonságokat a isset függvény. __isset által visszaadott egy logikai érték, és azt mondja, hogy, hogy fontolja meg a meglévő ingatlan.

Add végrehajtás __isset squere módszer az osztályban:

Anton, szeretném megköszönni, hogy a leckéket, továbbra is ebben a szellemben, a maga számára végre megérteni néhány dolgot, hogy nehéz volt megtanulni a más forrásokból származó, köszönjük! Nos, a kérdés a következő: a kódot, amely leírja módszerek és __get __set ahol a számítási terület a tér, a 18. sorban return $ this-> getArea ($ value); Igaz ez? Elhaladunk egy függvény getArea lehetőség, de a leírás a funkciója a bemeneti paraméterek nem, és általában a változó $ értéket ezen a ponton nem inicializált?

Van egy hiba. Fix. Köszönöm a megjegyzést.

Kapcsolódó cikkek