PHP-osztályok és -objektumok (2.)

PHP-osztályok és -objektumok (2.)

Előző heti cikkünkben elkezdtük az ismerkedést az objektumorientált programozással, bemutatva az osztályok és az objektumok alapjait. Megtanultuk az OOP definícióját, előnyeit, majd részletesen taglaltuk az osztályok és az objektumok fogalmát, számos példával illusztrálva. Mai leckénkben tovább kalandozunk az OOP világában: a konstruktorokkal, a destruktorokkal és az öröklődéssel foglalkozunk.

A konstruktorok és a destruktorok használata

Az objektumorientált programozás megkönnyítésének érdekében a PHP olyan módszereket is igénybe vesz, amelyek meghatározott akciók esetén az objektumon belül automatikusan lefutnak.

Az egyik ilyen módszer a __construct() (mely konstruktor néven ismert). Ez minden alkalommal automatikusan lefut, amikor új objektumot hozunk létre. Ehhez hasonló módon a __destruct() (azaz a destruktor) akkor fut le automatikusan, ha megsemmisítünk egy objektumot. A destruktor funkció minden olyan erőforrást „eltakarít” az objektum megsemmisítése után, amely az objektumhoz volt rendelve. Lássunk egy példát a két módszer működésére!

PHP-kód:

<?php

class MyClass

{

    // Konstruktor

    public function __construct() {

        echo 'A "' . __CLASS__ . '" osztály létrejött!<br />';

    }

 

    // Destruktor

    public function __destruct(){

        echo 'A "' . __CLASS__ . '" osztály megsemmisült.<br />';

    }

}

 

// Új objektum létrehozása

$obj = new MyClass();

 

// Üzenet a fájl végén

echo 'A fájl végéhez érkeztünk.';

?>

 

Megjelenítés a böngészőben:

A „MyClass” osztály létrejött!

A fájl végéhez érkeztünk.

A „MyClass” osztály megsemmisült.

A destruktor automatikusan lefut, amikor a script véget ér. Ahhoz azonban, hogy külön, még a script vége előtt beindítsuk a destruktort, segítségül hívhatjuk a PHP unset() funkcióját, ahogyan azt az alábbi példa is mutatja.

PHP-kód:

<?php

class MyClass

{

    // Konstruktor

    public function __construct() {

        echo 'A "' . __CLASS__ . '" osztály létrejött!<br />';

    }

 

    // Destruktor

    public function __destruct() {

        echo 'A "' . __CLASS__ . '" osztály megsemmisült.<br />';

    }

}

 

// Új objektum létrehozása

$obj = new MyClass();

 

// Objektum megsemmisítése

unset($obj);

 

// Üzenet a fájl végén

echo 'A fájl végéhez érkeztünk.';

?>

 

Megjelenítés a böngészőben:

A „MyClass” osztály létrejött!

A „MyClass” osztály megsemmisült.

A fájl végéhez érkeztünk.

 

A PHP automatikusan „feltakarít” minden kapcsolódó erőforrást, miután a script lefut — például lezárja az adatbázis-kapcsolatokat, megsemmisíti az objektumokat, stb.

Fontos megjegyezni, hogy a __CLASS__ egy magic constant (ezekkel korábbi leckéink egyikében ismerkedhettél meg), mely annak az osztálynak a nevét tartalmazza, amelyben előfordul. Ha az osztályon kívül jelenik meg, üres lesz.

Az osztályok származtatása az öröklődés révén

Az osztályok örökölhetik egy másik osztály tulajdonságait és módszereit. Ehhez az extends kulcsszót hívhatjuk segítségül. A származtatás folyamatát öröklődésnek nevezzük, s ez az egyik legnyomósabb érv, mely az objektumorientált programozás használata mellett szól.

Mutatunk is egy példát:

PHP-kód:

<?php

// Az osztály definíciója

require 'Rectangle.php';

 

// Új osztály definiálása a már létező osztály alapján

class Square extends Rectangle

{  

    // Módszer arra, hogy ellenőrizzük, hogy a négyszög kocka-e

    public function isSquare() {

        if ($this->length == $this->width) {

            return true; // Kocka

        }

        else {

            return false; // Nem kocka

        }

    }

}

 

// Új objektum létrehozása a Square osztályból

$obj = new Square();

 

// Az objektum tulajdonságai értékének beállítása

$obj->length = 20;

$obj->width = 20;

 

// Az objektum módszereinek lehívása

if ($obj->isSquare()) {

    echo 'A négyzet területe ';

}

else {

    echo 'A négyszög területe ';

}

echo $obj->getArea();

?>

 

Megjelenítés a böngészőben:

A négyzet területe 400

Amint az a fenti példán is megfigyelhető, a Square osztály definíciója nem tartalmazza a getArea() módszert, sem a $length és $width tulajdonságokat, a Square osztály elemei mégis használhatják őket, hiszen örökítve lettek a szülő Rectangle osztályról.

Plusz egy tipp: Mivel a gyermek osztály a szülő osztályból lett levezetve, derivált osztálynak is nevezzük, míg a szülő osztály neve az alaposztály.

Összegzés:

Mai leckénkbe ennyi fért bele. Megismerkedhettél a konstruktorokkal és a destruktorokkal, melyek az objektumorientált programozás mágikus módszereinek számítanak, és jelentősen megkönnyíthetik a programozó dolgát. Cikkünk második részében az osztályok származtatásával foglalkoztunk, és egy egyszerű példával be is mutattuk a tulajdonságok örökítését a gyakorlatban. Már csak annyi maradt hátra, hogy gyakorold a ma tanultakat, hiszen a jövő héten folytatjuk az OOP taglalását — szó lesz a tulajdonságok és a módszerek láthatóságáról, valamint a statikus tulajdonságokkal és módszerekkel is megismerkedünk majd.

 



Nyereményjáték

Rovatunk elsődleges célja, hogy közelebbről is bemutassa a legismertebb webtechnológiákat. Azok között az olvasók között, akik minden héten követik rovatunkat, azaz velünk tanulják a programozás alapjait és kitöltik a feladatsort, a sorozat végén egy laptopot sorsolunk ki.

A játék heti kérdése:

Mikor fut le egy objektum __construct() metódusa?

1. Amikor létrehozzuk az új objektumot.
2. Amikor egy osztályt egy másik osztályból származtatunk.
3. Amikor az objektum megsemmisül.
 

A választ a tanulok@erdsoft.com e-mail-címre kell elküldeni, a tárgysorba pedig a következőt kell beírni: HÉTNAP-TANULOK. Sok szerencsét!

 


 

Néhány szó rólunk:

Az ErdSoft (www.erdsoft.com) 2011-ben alakult meg. Csapatunkat a fiatalos lendület, a szakértelem, a folyamatos tanulás és tapasztalatgyűjtés jellemzi. Ügyfeleinknek igyekszünk teljes körű szolgáltatást nyújtani — bátran fordulhatnak hozzánk, legyen szó webfejlesztésről, alkalmazásokról, SEO-optimalizálásról, grafikai tervezésről, marketingről vagy szövegírásról. Csapatunk sikerét mi sem bizonyítja jobban, mint a több száz elkészült weboldal és a számos elégedett ügyfél Szerbiában, Magyarországon és az Egyesült Királyságban.

 

Szeretne értesülni, ha új cikk jelenik meg Számtek rovatunkban? Iratkozzon fel értesítőnkre!

E-mailben értesíteni fogjuk Önt az új cikkekről. Feliratkozáshoz kérjük adja meg a nevét és az e-mail címét.

Hozzászólások

Kapcsolódó cikkek

PHP-osztályok és -objektumok (2.)
Számtek
  • Erdsoft
  • 2019.09.13.
  • LXXIV. évfolyam 36. szám
PHP-osztályok és -objektumok (2.)
Számtek
  • Erdsoft
  • 2019.08.24.
  • LXXIV. évfolyam 34. szám
Facebook

Támogatóink