PHP V Osztályok, Objektumok
Osztály class Person { var $name; // tulajdonság, változó function getName() { // metódus, tagfüggvény return $this->name; } function setName($name) { $this->name = $name; } $p = new Person(); $p->setName(”Pali”); var_dump($p);
Konstruktor, destruktor function __construct(...) { –// inizializáló kód } function __destruct() { –// erőforrás felszabadítás }
Hozzáférések class TestClass { public $var1; // a ‘var’ is ‘public’ private $var2; // csak az osztálypéldány éri el protected $var3; // alosztályok példányai is elérik public function func2($v) { $this->var2 = ‘ ’. $v. ‘ ’; } $test = new TestClass(); $test->var2 = 20; // HIBA! $test->func2(20);
Típus korlátozás class PersonStorage { private $persons = array(); public function store(Person $p) { $this->persons[] = $p; // vagy array_push() } $st = new PersonStorage(); $p = new Person(); $p->setName(‘Paul’); $st->store($p); $st->store(45); var_dump($st); // Csak osztály vagy array típusra lehet a korlátozni
Öröklés class Szemely { protected $nev; function __construct($n) { $this->nev = $n; } public function getNev() { return $this->nev; } class Ugyfel extends Szemely { private $azon; function __construct($n, $a) { parent::__construct($n); $this->azon = $a; } public function getAzon() { return $this->azon; }
Final osztály final class FinalClass { private $v1; public function setV($v) { $this->v1 = $v; } class TestClass extends FinalClass { public function printV() { echo ‘ ’. $this->v1. ‘ ’; }
Konstansok class Class1 { const PI = 3.14; } echo Class1::PI. ‘ ’; class Class2 extends Class1 { private static $e = 2.718; public function test() { echo parent::PI. ‘ ’; echo self::$e. ‘ ’; } $obj = new Class2(); $obj->test();
Absztrakt osztály abstract class AbstractPrinter { abstract protected function prefix($v); public function printValue($v) { print $this->prefix($v). ‘ ’; } class BoldPrinter extends AbstractPrinter { protected function prefix($v) { return ‘ ’. $v. ‘ ’; } $test = new BoldPrinter(); // $test = new AbstractPrinter() HIBA!!! $test->printValue(‘Hello world’);
Interfész interface PrinterInterface { public function printValue($v); } class BoldPrinter implements PrinterInterface { public function printValue($v) { echo ‘ ’. $v. ‘ ’; } $test = new BoldPrinter(); $test->printValue(‘Hello world’);
Feladatok require_once(‘person.php’); $records = file(‘persons.txt’); $persons = array(); foreach ($records as $record) { $r = explode(‘;’, $record); $n = trim($r[0]); $a = intval(trim($r[1])); $w = doubleval(trim($r[2])); $persons[] = new Person($n, $a, $w); } foreach ($persons as $p) { $n = $p->getName(); $a = $p->getAge(); $w = $p->getWeight(); echo ”Name: $n; Age: $w; Weight: $w ”; }
Objektum tárolás require_once(‘person.php’); $p = new Person(‘Pali’, 34, 77.9); $ser = serialize($p); file_put_contents(‘person.data’, $ser); unset($p); unset($ser); $ser = file_get_contents(‘person.data’); $p = unserialize($ser); var_dump(p); // __sleep() és __wakeup() metódus majd később
Feladatok A penz_adat könyvtárban a 2. gyakorlat feladata során használt adatok vannak fájlokban tárolva. A dao.php egy interfészt definiál adatok eléréséhez. (DAO = Data Access Object) Készítsünk osztályt, amely a fájlokat feldolgozza és az interfész által definiált metódusokat valósítja meg. Kiindulásként használjuk a filedao.php –t.