NetHq Blog


A rossz legjobb kritikája az, ha megmutatjuk, hogyan kell jobban csinálni.

PHP OOP alapok I. rész - Osztályok, attribútumok és metódusok létrehozása

Nightvis, 2012.07.24 10:54
Ebben a cikksorozatban megismerkedünk a PHP nyelvben való objektumorientált fejlesztés módszereivel. E cikksorozat első részében megismerjük, hogy hogyan hozhatunk létre egy új osztályt, valamint osztályon belül attribútumokat és metódusokat, valamint hogyan érhetjük el, illetve módosíthatjuk azok tartalmát.

Új PHP osztály létrehozása:

class osztalyom{ 
  //osztályon belüli tartalom


Ahogy a fenti példában láthatjuk, osztályt a class szóval majd az osztály nevével hozunk létre, azután az osztály tartalma a kapcsos zárójelek közé kerül. Ahhoz hogy ez az osztályunk használható is legyen, attribútumokra és metódusokra is szükségünk lesz. Attribútumokat úgy hozhatunk létre, hogy a megfelelő kulcsszavakkal változókat deklarálunk. Mik ezek a kulcsszavak? A public, protected, private. Az alábbi kódban létrehozunk három attribútumot:

class osztalyom{ 
  public $attributum1;
 
  protected $attributum2;
 
 private $attributum3;


Az osztályon belüli attribútumok használata megegyezik az osztályon kívüli változók használatával. Jobb leszögezni, hogy az osztályon belül deklarált változók nem globálisak.

Hogy mit is takar a public, protected, private kulcsszó? Ezekkel a kulcsszavakkal tudjuk szabályozni a láthatósági szinteket. Fontos megjegyezni, hogy a láthatósági szinteket csak a PHP 5-ös verziójától tudjuk megadni. Minden metódus és adattag elé kiírhatóak a kulcsszavak, ha nem írjuk ki, akkor a PHP automatikusan public-ként kezeli azt. A public megegyezik a PHP 4-es verziójában használt var kulcsszóval. A public kulcsszóval ellátott metódus vagy tulajdonság tehát elérhető az őt tartalmazó osztály metódusaiból, a belőle származtatott osztyályokban, és az objektumokból is.

A protected kulcsszót használva, a metódus, vagy tulajdonság csak az őt tartalmazó osztály metódusaiból, vagy a belőle származtatott osztályokban elérhető, fontos megjegyezni azomban, hogy objektumokból nem elérhetőek.

A private kulcsszó használva, a metódus, vagy tulajdonság, csak az őt tartalmazó osztály metódusaiból érhető el.

Metódusokat úgy hozhatunk létre, hogy az osztálydefiníción belül metódusokat deklarálunk. A metódusok létrehozásakor is használjuk a 3 kulcsszót (public, protected, private). Az alábbi kódban létrehozunk két metódust, továbbá a metodus2() két paramétert is vár.

class osztalyom{ 
 public metodus1(){
  //metodus1 tartalma
 }
 
 public metodus2($attributum1, $attributum2){
  //metodus2 tartalma
 }
}


Most, hogy tudjuk hogyan hozunk létre attribútumokat és metódusokat, nézzük meg hogyan tudjuk használni őket. Egy osztályt mielőtt használni szeretnék példányosítanunk kell objektum formájában. Objektumot a new kulcsszóval lehet létrehozni. Az alábbi kódban példányosítjuk a fenti kódban szereplő osztályunkat 3 példányban: 

$peldany1 = new osztalyom(); 
$peldany2 = new osztalyom();
$peldany3 = new osztalyom(); 


Miután példányosítottuk az osztályunkat, nézzük meg hogyan is használhatjuk azokat. Az alábbi kódban létrehozunk egy osztályt, egy metódussal, amely kiírja a már sok helyen megszokott Hello World szöveget, két féle képpen is.

class osztalyom{ 
 public $attributum = 'Hello World';
 public metodus($attributum){
  echo $attributum;
 }
}

$peldany = new osztalyom();
$peldany->metodus('Hello World');
echo $peldany->attributum; 


Nézzük át, hogy a fenti kódunkban mi is történik. Létrehozzuk az osztalyom osztályt, melyben létrehoztunk egy metódust, mely egy paramétert vár. Az osztályunkat példányosítottuk a $peldany változóba, és most jön az újdonság:

Osztályunkon belül a metódusokra a $peldany_neve->metodus_neve(); , az attribútumokra a $peldany_neve->attributum_neve; módon hivatkozunk. Mivel a fenti programunkban meghívjuk a metodus() nevű metódusunkat, mely a $attributum paramétert várja, melynek a Hello World értéket adtuk meg, kiírja hogy Hello World. De mivel meghívtuk a metóduson kívüli $attributum nevű attrubútumunkat, melyet ki is iratunk az echo kulcsszóval, szintén kiírja hogy Hello World.

Mindenképpen érdemes megjegyezni, hogy a metóduson belüli $attributum, és a metóduson kívüli $attributum nem ugyan az az attribbútum. A metóduson belüli attribútumunk a metódus meghívásakor átadott paraméterünket írja ki. A metóduson kívüli attribútumokra, a $this kulcsszóval hivatkozhatunk, melyet az alábbi kódunkban bemutatok:

class osztalyom{ 
 public $attributum;
 
 public function metodus(){
  echo $this->attributum;
 }
}

$peldany = new osztalyom();
$peldany->attributum = 'Hello World';
$peldany->metodus(); 


A fenti kódban két újdonság is szerepel. Az egyik, hogy az attribútumunknak kívülről adtunk értéket. A másik, hogy a metódusunkon belülről hívtuk meg a külső attribútumot. Eddig egyszerű volt igaz? Most bonyolítsuk egy kicsit. A $this kulcsszóval metódusunkon belülről másik metódust is meghívhatunk, melyet az alábbi kódunk prezentál:

class osztalyom{
 public $attributum;

 public function metodus1(){
  echo $this->attributum;
 }
 
 public function metodus2($attributum){
  $this->attributum = $attributum;
  $this->metodus1();
 }
}

$peldany = new osztalyom();
$peldany->metodus2('Hello World'); 


A fenti kódunkban létrehoztunk egy külső attribútumot, és két metódust. A metodus2() egy paramétert is vár. A metodus2() metódusunk-on belül a külső attribútumunknak megadtuk a Hello World értéket, metodus1() metódust meghívtuk $this->metodus1(); módon, mely metódusunk kiírja a külső attribútumunkat.

A metódusoknak lehetnek visszatérési értékeik is, és objektumon át ki is írathatjuk azokat. Erre is nézzünk egy példát:

class osztalyom{ 
 public function metodus1(){
  return 'Érték';
 }
}

$peldany = new osztalyom();
echo $peldany->metodus1(); 


A fenti kód kiírja hogy: Érték. A függvényuk ugyan úgy viselkedik, mintha osztályon kívül deklarálnánk, annyi különbséggel, hogy csak objektumon át érhetjük el (ez nem teljesen igaz, de erről bővebben és későbbi cikkben fogunk beszélni).

Tartalom közösségi megosztása: