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

Mai leckénkben még egy lépéssel tovább haladunk, és bemutatjuk a tulajdonságok, módszerek láthatóságát, valamint a statikus tulajdonságokkal és módszerekkel is megismerkedhetsz.

A tulajdonságok és módszerek láthatóságának kontrollálása

Amikor az osztályokkal dolgozunk, megtagadhatjuk a hozzáférést a tulajdonságaikhoz és módszereikhez a láthatósági kulcsszavak segítségével, melyek lehetővé teszik a nagyobb kontrollt. Három ilyen kulcsszó létezik (a legmagasabb fokú láthatóságtól a legalacsonyabb fokú láthatóságig): public, protected és private. A kulcsszavak azt határozzák meg, hogyan és honnan érhetőek el, illetve módosíthatóak a tulajdonságok és a módszerek.

  • public — A publikus tulajdonsághoz vagy módszerhez bárhonnan hozzá lehet férni, az osztályon belül és kívül is. A PHP-ben ez az osztály minden tagjának alapbeállított láthatósága.
  • protected — A protected, azaz a védett tulajdonság vagy módszer csak az osztályon belülről vagy az osztályról örökített, osztályból származtatott osztályokból érhető el.
  • private — A privát tulajdonság vagy módszer csak az őt meghatározó osztályon belülről érhető el. A privát tulajdonságokat vagy módszereket a gyermek vagy örökített osztályok sem tudják elérni.

Alábbi példánk bemutatja, hogyan működik a láthatóság a gyakorlatban.

PHP-kód:

<?php
    // Osztály definiálása
    class Automobile
    {
        // Tulajdonságok deklarációja
        public $fuel;
        protected $engine;
        private $transmission;
    }

    class Car extends Automobile
    {
        // Konstruktor
        public function __construct() {
            echo 'A "' . __CLASS__ . '" osztály létrejött!<br />';
        }
    }

    // Objektum létrehozása az Automobile osztályból
    $automobile = new Automobile();

    // Próbálkozás az $automobile objektum tulajdonságainak beállítására
    $automobile->fuel = 'Petrol'; // ok
    $automobile->engine = '1500 cc'; // fatal error
    $automobile->transmission = 'Manual'; // fatal error

    // Objektum létrehozása a Car osztályból
    $car = new Car();

    // Próbálkozás a $car objektum tulajdonságainak beállítására
    $car->fuel = 'Diesel'; // ok
    $car->engine = '2200 cc'; // fatal error
    $car->transmission = 'Automatic'; // meghatározatlan
?>

Statikus tulajdonságok és módszerek

A láthatóság beállítása mellett a tulajdonságok és a módszerek statikusak is lehetnek (static), amitől anélkül válhatnak elérhetővé, hogy szükség lenne a példányosításra. A statikus tulajdonságok és módszerek a :: operátor segítségével érhetőek el, a következő módon: ClassName::$property és ClassName::method().

A statikussá nyilvánított tulajdonságokhoz nem tudunk hozzáférni az osztály objektumain keresztül, a statikus módszerhez viszont hozzáférhetünk, ahogyan azt az alábbi példa is illusztrálja:

PHP-kód:

<?php
    // Az osztály definiálása
    class HelloClass
    {
        // Statikus tulajdonság deklarálása
        public static $greeting = 'Hello World!';
       
        // Statikus módszer deklarálása
        public static function sayHello() {
            echo self::$greeting;
        }
    }

    // Próbálkozás a statikus tulajdonsághoz és módszerhez való közvetlen hozzáférésre
    echo HelloClass::$greeting; // Megjelenítés: Hello World!
    HelloClass::sayHello(); // Megjelenítés: Hello World!

    // Próbálkozás a statikus tulajdonsághoz és módszerhez való hozzáférésre egy objektumon 
    keresztül
    $hello = new HelloClass();
    echo $hello->greeting; // Strict Warning
    $hello->sayHello(); // Megjelenítés: Hello World!
?>

A self kulcsszó a fenti példában azt jelenti, hogy a „jelenlegi osztályról” van szó. A self kulcsszó előtt soha nem szerepel dollárjel ($) és mindig a :: operátor követi (például: self::$name).

A self kulcsszó nem összetévesztendő a this kulcsszóval, mely azt jelenti, hogy „a jelenlegi objektum” vagy „az osztály jelenlegi példánya”. A this kulcsszót mindig a dollárjel ($) előzi meg és a -> operátor követi (például: $this->name).

Fontos megjegyzés: Mivel a statikus módszerek lehívhatóak az osztály példánya (objektuma) nélkül is, a $this pszeudováltozó nem érhető el a statikussá nyilvánított módszeren belül.

Összegzés:

Mai leckénk segítségével még tovább bővíthetted az objektumorientált programozással kapcsolatos tudásodat. Megismerkedhettél a láthatóság fogalmával, és bemutattuk a statikus objektumokat, illetve tulajdonságokat is. Reméljük, hogy a rövid OOP-kurzusunk alatt sikerült megértened a koncepció alapjait. Ha igen, akkor már csak annyi maradt hátra, hogy kitartóan gyakorolj, hiszen PHP-programozói pályafutásod során biztosan sokszor veszed majd hasznát a most tanult dolgoknak. A jövő héten újabb témát dolgozunk majd fel, tarts velünk akkor is!

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.