OOP php osztály, osztály példányok, mezők, módszerek és konstruktőrök, web-fejlesztők blog

OOP php osztály, osztály példányok, mezők, módszerek és konstruktőrök, web-fejlesztők blog
Ahogy az előző cikkben. osztály egy leírása néhány közötti hasonlóságok egy tárgy. Ebben a cikkben megmutatjuk néhány példát, hogyan írták le az adatokat tárolják például az osztály és annak viselkedését, azaz olyan módszerekkel.







Leírja ezen osztály és példányosıtási

Osztály Leírás PHP kezdődik kulcsszó osztály. Ezt követi az osztály nevét. Úgynevezett osztályok hozott nagybetűvel. Miután az osztály megnevezett zárójelek van egy leírás a osztály tagjai - a mezők (adatok) és módszerek.

Létrehozása osztály például nem különbözik írásban függvény eredménye egy változó, kivéve a kulcsszó új.

$ EkzemplyarKlassa = new ClassName ();

osztály mező

A bemutató területeken az osztály meg kell adnia a hozzáférési specifikátor - egy kulcsszó, ami meghatározza a terület a látómező, amelyre vonatkozik. A php három hozzáférési előírást: nyilvános. védett és magán. Specifier nyilvánosság hozzáférhet bárhonnan a pályán, védett - csak órák állva ugyanazon öröklési lánc (az leszármazott osztály, a gyermekek gyermekei, stb) és a privát megtagadja a hozzáférést bárhonnan, kivéve az osztály. Miután hozzáférést specifikátor jön egy mező nevét, fűz egy dollár jelet.

Nem fogjuk vizsgálni ezt a szintaxist részletesen, mivel elavult, de tudni kell, mert amikor régebbi verziói php lett volna releváns, már írt elképzelhetetlen mennyiségű kódot, és ez még ma is használják számos projektben. Ezzel a szintaxis, az osztály mezők érhetők el a külvilágtól, mintha nyilvánították a nyilvános hozzáférés adja meg.

szimbólum eléréséhez használt mezők egy osztály „->”. Mező nevét, amelyhez szeretnénk foglalkozni nélkül írták a dollár jel. Fields-ről kívül az osztály, ebben az esetben, mert a nyilvános hozzáférés adja meg.

$ User = új felhasználó (); $ User-> login = 'true-coder'; $ User-> password = 'qwerty'; echo „név: $ felhasználó-> login
"// Bejelentkezés: igaz-coder" Jelszó: $ felhasználó-> jelszó „; // jelszó: qwerty

Jelentés a mezők alapértelmezett osztály - null:

$ User = új felhasználó (); echo "Felhasználónév:" .getType ($ felhasználó-> login).”
"// Bejelentkezés: NULL" Jelszó:”.getType ($ felhasználó-> jelszó); // jelszó: NULL

A php alkalmazása megengedett, hogy a mezőt, amelynek neve tartalmazza egy string változót:

$ User = új felhasználó (); $ PropertyName = 'login'; $ User -> $ propertyName = 'true-coder'; $ Tulajdonságérték = $ user -> $ propertyName; echo "$ propertyName: $ tulajdonság_értéke"; // bejelentkezés: igaz-coder

Ez a funkció lehetővé teszi, hogy a munkát a script különböző körülményektől függően határozza meg a mező nevét, hogy az alkalmazni kívánt.

Kapcsolatfelvétel egy nem létező mezőnek (tulajdonságot) PHP nem hibákat, és ha egy ilyen területen hozzárendelt érték, akkor marad az objektum példány. Az ilyen mezők vagy említett tulajdonságokkal dinamikusan meghatározott.

$ P = new Point (); $ P-> z = 10; echo "z: $ p-> Z"; // z: 10

Ilyen technikát tekinthető rossz formában, hiszen nyilvánító területén az osztályban, azt jelenti, hogy milyen adatokat fognak tárolni egy példánya ebben az osztályban. Dinamikusan meghatározott tulajdonságokkal, nem tudjuk garantálni a jelenlétük a példány.







A gyakorlatban ilyen kódot klassax Felhasználó Point vagy nem elfogadható. Hozzáférés osztályú területeken, néhány kivételtől eltekintve, el kell végezni olyan módszerek segítségével, és mezők magukat megközelíthetetlen csinálni az órákon kívül, vagy öröklési lánc. Szintén kényelmetlen értékeket rendelni a mezők létrehozása után az objektumot.

osztály módszerek

Amint azt már említettük, a módszerek viselkedését leíró esetben az osztály, azaz a műveleteket hajthatnak végre. Módszerek leírása az osztályban, valamint leírást a területen, kezdve a hozzáférési specifikáló, majd egy kulcsot kulcsszó funkciót. módszer neve és a paraméterek listája zárójelben. Bent a módszer, a hozzáférést az aktuális objektumpéldányt lehet beszerezni a kulcsszó $ this. amely, ellentétben sok más programozási nyelvek, PHP van írva egy dollár jel. Kívül az osztály módszer hívást készül a példány neve. Ami a hozzáférést a mezőket, hogy hivatkozhat módszerekkel szimbóluma „->”.

Tegyük fel, hogy egy osztály, amely leírja egy téglalapot a mezőket tárolja a magasság és a szélesség, és olyan módszerrel, amely figyelembe veszi a téglalap területe.

Készítünk egy példányát az osztály és call módszerek getArea:

$ Téglalap = new Rectangle (); $ Rect-> width = 15; $ Rect-> magasság = 20; echo $ rect-> getArea (); // 15 * 20 = 300

Mint osztály módszerek funkció paramétereket adhat meg. Kissé szélesednek téglalap osztály. hozzátéve a koordinátákat a bal felső sarokban a téglalap és translateTo szállító megadott módszerrel pont:

Hozzunk létre egy osztályt például hozzárendelheti a értékmezőben és hívja translateTo módszer néhány lehetőség:

$ Téglalap = new Rectangle (); $ Rect-> width = 15; $ Rect-> magasság = 20; $ Rect-> x = 10; $ Rect-> Y = 20; echo „koordinálja a szállítás előtt:
"" X: $ rect-> x
”. // x 10" y: $ rect-> y
"; // y: 20 $ rect-> translateTo (30, 40); echo" után:
"" X: $ rect-> x
"// x: 30" y: $ rect-> y"; // y: 40

konstruktőrök

$ Rect = új téglalap (10, 20, 100, 200); echo „x: $ rect-> x
”. // x 10" y: $ rect-> y
”. // y: 20" Szélesség: $ rect-> szélessége
”. // szélesség: 100" Magasság: $ rect-> magasság
„; // Magasság: 200

A régebbi verziói php designer neve ugyanaz volt, mint a neve a transzfer osztály, azaz a mi esetünkben ez a következőképpen néz ki:

Ez egy örökölt szintaxis és használata őket nem szükséges.

Ismétlem, hogy ez a kód, mint a fenti példában, az írás csak a minőségi oktatás. Nyilvános mező sérti az tokozás és, hála a nyílt hozzáférést a külvilágtól, akkor elrontani az értéküket. Ha szeretné megtudni, hogyan lehet biztosítani a hozzáférést a területeken az osztály, megtudhatja a következő cikk ebben a sorozatban.

Statikus mezők és módszerek állandók

osztály Klass public static függvény getCount () > $ Példányok = array (); A ($ i = 0; $ i <10; $i++) <$instances[] = new Klass();> echo "A példányok száma az osztály:" .Klass :: getCount ()”.
"; // 10 $ instance = új Klass (); echo" A szám létrehozása után egy másik tárgy:”.Klass :: getCount (); // 11

Felhívjuk figyelmét, hogy megpróbálja megváltoztatni a számlálás mező kívülről osztály hibát fog okozni, mert ez a terület rögzítésre kerül a privát hozzáférést adja meg.

// Végzetes hiba: Nem lehet hozzáférni a magántulajdon Klass :: $ számít ... Klass :: $ count = -10;

Constant is az órákon kívül:

echo Klass :: CONSTANT_NAME; // 100500

Néhány szó a tervezési kód

A php bonyolultabbá abban a tényben rejlik, hogy a natív függvények, osztályok, módszerek és változók elnevezése a különböző stílusokat. Összehasonlítás: DateTime. in_array. $ _POST. $ GLOBALS. Ezért, hogy a kód tökéletesen egyenletes nem sikerül, de saját funkcióit, osztályok, módszerek, és a változó nevek ugyanabban a stílusban.

Ezen talán amíg a célba. Végül szeretném megjegyezni, hogy a megértéséhez néhány dolgot lehet jönni az idő alatt a gyakorlatban. Tehát az én tanácsom írni, írni és írni a kódot még egyszer. Legyen ez használhatatlan lesz, bár a rossz minőségű, hagyjuk, hogy nem lehet használni a valós projektek, de kapsz felbecsülhetetlen értékű tapasztalatokat.

És, mint mindig, jó szerencsét!

Köszönöm az érdekes cikket.

Kérjük, Dmitry. Örülök, hogy tetszett.

És mi használjuk szintaxiskiemeléssel? Mi az a bővítmény? Vagy kézzel festett kód?

Köszönöm szépen, minden nagyon könnyen érthető és világos.
Nem értem, csak egy dolog:
-Most van egy tervező
public function __construct ($ x, $ y, $ z) $ this-> x = $ x; // itt egyértelmű
...
>
vagyis azokat az értékeket, amelyek előre meghatározott a __construct már nincs szükség
hogy meghatározzák a funkciók (módszerek)
Például:
public function coolMix ($ x, $ y) $ this-> x = $ x; // már nincs szükség itt?
$ This-> y = $ y // már nincs szükség itt?
>

Nem, újradefiniálja a területen a módszereket, amelyeket a inicializálni a kivitelező, akkor nem szükséges.

Van valami változik, ha egy példányának létrehozásához zárójel nélkül, például: $ = new motort Engine; ?




Kapcsolódó cikkek