Objektumok, Osztályok
A PHP osztályok bemutatása, létrehozásuk, használatuk.
- Főoldal
/
- Kurzusok
/
- Webfejlesztés
/
- PHP
/
- PHP kezdőknek
Objektumok, Osztályok
Az osztályok (objektumok) szerepe, hogy egy vagy több változóból vagy/és függvényből álló sorozatot összefogjanak egy elemként. Ezáltal rengeteg fölösleges forráskódot megspórolva és a rendszert nagyon átláthatóvá téve.
Például amikor személyek adatait kell összegyűjtsük, esetleg feladatokat végezzünk velük.
Jelölés, létrehozás:
<?php
class People
{
// osztályszintű változók létrehozása
// Ez a függvény hozza létre magát az osztályt
function __construct()
{
}
// végrehajtandó feladatok (függvények)
}
?>
Az osztály létrehozásához nem mindig kell kötelezően a __construct függvény, ha nem hozzuk azt létre alapból egy adott üres függvényként létrehozza, mely csak futás közben lesz érzékelhető.
Ahhoz hogy egy ilyen osztályt majd fel is tudjunk használni (nem elég csak létrehozni), ahhoz egy változóba el kell mentsünk egy új példányt belőlük. Az osztályokból akárhány változóba menthetünk új példányt, vagy akár két különböző változóba is tehetjük ugyanazt a példányt. Erre nagyon kell vigyázni. Az osztályokból való példány létrehozása az alábbi módon történik:
<?php
// Példány készítése
$people = new People();
?>
Az osztályszintű változók létrehozása a következő formában történik: Az osztály elején a függvények előtt határozzuk meg őket. Ezek lehetnek public, private, protected típusúak, ezekről bővebben az Objektum Orientált Programozásnál beszélünk.
<?php
class People
{
// osztályszintű változók létrehozása
public $name, nr_legs, $year, $birthdate;
private $gender;
// Ez a függvény hozza létre magát az osztályt
public function __construct()
{
}
// végrehajtandó feladatok (függvények)
}
?>
Ezeket az osztályszintű változókat majd bármelyik az osztályon belüli függvényben használhatjuk a $this segítségével az alábbi módon: $this->name, $this->year, stb.
A létrehozott függvényeknek szintén meg kell határozzuk, hogy publc, private vagy protected típusúak legyenek, ezáltal meghatározva, hogy kivülről elérhetőek lesznek vagy sem. Például ha szeretnénk értéket beállítani a gender változónknak egy függvény segítségével, akkor azt az alábbi módon tehetjük meg:
<?php
class People
{
// osztályszintű változók létrehozása
public $name, nr_legs, $year, $birthdate;
private $gender;
// Ez a függvény hozza létre magát az osztályt
public function __construct()
{
}
// végrehajtandó feladatok (függvények)
public function Set_gender( $new_gender )
{
$this->gender = $new_gender;
}
}
?>
Ebben az esetben a Set_gender nevű függvényünk (feladatunk) egy segédváltozó segítségével megkapja, hogy mi legyen a gender új értéke, majd ezt beállítja. A függvényekben szereplő változók nevei megegyezhetnek az osztályszintű változók neveivel, mivel a függvényszintű változó pl. $gender és az osztályszintű pedig $this->gender. Tehát a példát úgy is írhattuk volna, hogy:
<?php
class People
{
// osztályszintű változók létrehozása
public $name, nr_legs, $year, $birthdate;
private $gender;
// Ez a függvény hozza létre magát az osztályt
public function __construct()
{
}
// végrehajtandó feladatok (függvények)
public function Set_gender( $gender )
{
$this->gender = $gender;
}
}
?>
A példány létrehozása után a $people (annak a változónak a neve amelybe a példányt mentettük) változónk segítségével érünk el mindent ami az osztályban publikus (public) a következő formában: $people-> majd a változó vagy függvény neve.
Na most, ez mind szép, de végül is mire jó ez a sok minden?
Feltételezzük, hogy egy 100 főből álló csoport személyeinke adataival kell dolgozzunk a forssákódunkban. Minden személynek lesz neve, címe, életkora, neme, stb.
Ha ezeket hagyományosan programozzuk le, drasztikus módon, akkor kb így nézne ki:
<?php
// Első személy adatai
$people1_name = "Első személy"
$people1_address= "20"
$people1_year = "Kocka utca 2"
$people1_gender = "Nő"
// Második személy adatai
$people1_name = "Második személy"
$people1_address= "21"
$people1_year = "Görbe utca 2"
$people1_gender = "Férfi"
// És így tovább 100ig
?>
Feltételezzük, hogy ezt le ell írjuk 100x, mert annyi klienssel kell dolgozzunk épp. Az 100 x 4 sor = 400 sor csak az adatok bevitele a programozásba. Majd ha műveletet kell végezzünk velük, pl. ki kell írassuk a nevüket, akkor kb. így nézne ki:
<?php
// Első személy adatai
echo $people1_name." ".$people1_address." ".$people1_year." ".$people1_gender;
// Az eredmény ez lenne: Első személy 20 Kocka utca 2 Nő
// Második személy adatai
echo $people1_name." ".$people1_address." ".$people1_year." ".$people1_gender;
// Az eredmény ez lenne: Második személy 21 Görbe utca 2 Férfi
// És így tovább 100ig
?>
Ez kicsit hosszas feladat, persze ha egy tömbben (listában) tárolnánk a neveket, akkor egy ciklus segítségével picit lehetne egyszerűsíteni rajta, de most a drasztikus megoldást akartuk szemléltetni ezzel.
A másik lehetőségünk, hogy függvényt használunk a kiíratásra, szintén ebben a drasztikus formában. A változók létrehozásának folyamata ugyanúgy maradna, 400 sor. A múvelet nem spórolna meg sort ebben az esetben, de szebb alakba hozza a kódunkat:
<?php
// Létrehozunk egy függvényt amely segít a kiíratásnál
function Show_people_data( $people1_name, $people1_address, $people1_year, $people1_gender )
{
// személy adatai
echo $people1_name." ".$people1_address." ".$people1_year." ".$people1_gender;
}
Show_people_data( $people1_name, $people1_address, $people1_year, $people1_gender );
Show_people_data( $people2_name, $people2_address, $people2_year, $people2_gender );
?>
Ami még jó ebben az esetben, hogy amennyiben a kiíratás formáján szeretnénk változtatni, pl. nem egyszerű szünettel elválasztani az adatokat, hanem vesszővel, és az adatok végére egy új sort tenni, akkor csak egy helyen kell javítsuk a kodunkat, a Show_people_data függvényben. Ezáltal spórolunk a változtatások idején.
A harmadik lehetőségünk az osztályok használata, függvényekkel, drasztikus módon, ami így nézne ki:
<?php
class People
{
// osztályszintű változók létrehozása
public $name, $address, $year, $gender;
// Ez a függvény hozza létre magát az osztályt
function __construct()
{
}
// Létrehozunk egy függvényt amely beállítja a személy adatait
public function Set_data( $name, $address, $year, $gender )
{
// személy adatai
$this->name = $name;
$this->address = $address;
$this->year = $year;
$this->gender = $gender;
}
// Létrehozunk egy függvényt amely segít a kiíratásnál
public function Show_data()
{
// személy adatai
echo $this->name." ".$this->address." ".$this->year." ".$this->gender;
}
}
$people1 = new People();
$people1->Set_data( "Első személy", "20", "Kocka utca 2", "Nő" );
$people2 = new People();
$people2->Set_data( "Második személy", "21", "Görbe utca 2", "Férfi" );
// Majd a kiíratások
$people1->Show_data();
$people2->Show_data();
?>
Ebben az esetben a forráskódunk drasztikusan megírva kb. 300 sorból álna, mivel minden személynek 3 sorból áll a kód részlete, ehhez még hozzajön az osztály mérete, ami 26 sor. Viszont sokkal inkább átlátható, és könnyedén bővíthető.
Ha az osztályt egy külön fájlba tesszük, hogy ne is lássuk, nézzük meg úgy a kódot és döntsük el, melyiket szebb olvasni?
<?php
// Első változat
$people1_name = "Első személy"
$people1_address= "20"
$people1_year = "Kocka utca 2"
$people1_gender = "Nő"
$people1_name = "Második személy"
$people1_address= "21"
$people1_year = "Görbe utca 2"
$people1_gender = "Férfi"
echo $people1_name." ".$people1_address." ".$people1_year." ".$people1_gender;
echo $people1_name." ".$people1_address." ".$people1_year." ".$people1_gender;
// Második változat, amelyhez hozza tartozik az első is a kiíratások (echo) nélkül
function Show_people_data( $people1_name, $people1_address, $people1_year, $people1_gender )
{
// személy adatai
echo $people1_name." ".$people1_address." ".$people1_year." ".$people1_gender;
}
Show_people_data( $people1_name, $people1_address, $people1_year, $people1_gender );
Show_people_data( $people2_name, $people2_address, $people2_year, $people2_gender );
// Harmadik változat
$people1 = new People();
$people1->Set_data( "Első személy", "20", "Kocka utca 2", "Nő" );
$people1->Show_data();
$people2 = new People();
$people2->Set_data( "Második személy", "21", "Görbe utca 2", "Férfi" );
$people2->Show_data();
?>
- Előző lecke: Függvények
- Következő lecke: Hibakezelés
Részletek
- Megtekintve: 88
- Haszontalannak jelölve: 0
- Hasznosnak jelölve: 0
- Értékelés: