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

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.

Az oldal sütiket használ, hogy személyre szabjuk a tartalmakat és reklámokat, hogy működjenek a közösségi média funkciók, valamint hogy elemezzük a weboldal forgalmát. Bővebben a "Részletek mutatása" gombra olvashat.
Az oldal sütiket használ, hogy személyre szabja az oldalon megjelenő tartalmat és reklámokat.