$this->tytul



Pobieranie 113,03 Kb.
Data27.11.2017
Rozmiar113,03 Kb.

Tworzenie obiektów. Konstruktory i destruktory

Dziedziczenie



Tworzenie klasy:

Definicje

  1. Klasa – reprezentuje zbiór obiektów, które mogą różnic się między sobą, lecz posiadającą określoną liczbę podobieństw. Klasa zawiera obiekty posiadające takie same operacje, działające w identyczny sposób, i takie same atrybuty, opisujące identyczne właściwości, chociaż właściwości tych atrybutów mogą różnić się pomiędzy poszczególnymi obiektami.

  2. Obiekt- jest unikatowym i identyfikowalnym zbiorem zapisanych danych (atrybutów) i operacji (metod) pracujących na tych danych. Atrybuty to właściwości bądź zmienne odnoszące się do obiektu. Operacje z kolei to metody, działania lub funkcje, które obiekt może podejmować w celu modyfikowania siebie lub zewnętrznego efektu. (Często wymiennie stosuje się pojęcie atrybut z pojęciami zmienna składowa lub właściwość, właściwość pojęcie operacja – z pojęciem metoda.)

O rzeczowniku „rower” można myśleć jako o klasie obiektów, opisującej wiele konkretnych rowerów o wielu cechach wspólnych (atrybutach), jak dwa koła, kolor i wielkość, oraz operacje takie jak ruch.

Konkretny rower można ująć jako obiekt pasujący do klasy rowerów. Posiada on wszystkie wspólne cechy rowerów, również operację ruchu, która działa tak jak ruch w innych rowerach. Atrybuty konkretnego roweru mają unikatowe wartości, na przykład kolor zielony, ponieważ nie wszystkie rowery są zielone.



Zadanie 1. Napisz program który wyświetli imię psa i kota. Program wykonaj za pomocą klas

Wynik programu:





Metody klas:

Metodę klasy w PHP definiuje się podobnie jak funkcje w programowaniu strukturalnym. Należy jedynie pamiętać o operatorze zasięgu.



Zadanie 2. Napisz program który sprawdzi czy podałeś imie. Napisz specjalną metodę do klasy sprawdzającą czy istnieje imie.

Wynik:




  1. Konstruktory

Konstruktor jest wywoływany przy tworzeniu obiektu, może, więc wykonywać przydatną inicjatywę zadań takich jak nadawanie atrybutom sensownych wartości początkowych czy też tworzenie innych obiektów wymaganych przez ten obiekt.

Konstruktor jest deklarowany w identyczny sposób jak inne operacje, ale posiada specjalną nazwę __construct(). Jest to nowość w PHP5. W poprzednich wersjach funkcje pełniące rolę konstruktorów nosiły taką samą nawę jak klasa. Dla zapewnienia wstecznej zgodności, w sytuacji gdy w klasie nie zostanie znaleziona funkcja nosząca nazwę __construct(), PHP spróbuje odszukać funkcję o nazwie takiej samej jak nazwa klasy.



  1. Destruktory

Destruktory są nową konstrukcją PHP5. Dzięki nim można implementować funkcjonalności, które będą mogły być wykonywane bezpośrednio przed zniszczeniem obiektu realizowany automatycznie w momencie, gdy wszystkie odwołania do klasy zostaną usunięte lub wypadną poza zasięg.

Analogicznie do zasad nazewnictwa konstruktorów, destruktor klasy powinien nosić nazwę __destruct(). Destruktory nie mogą przyjmować żadnych parametrów.



Dziedziczenie polega na tym, że dana klasa (typ obiektowy) może być utworzony jako potomek wcześniej utworzonej klasy. Klasa utworzona w wyniku dziedziczenia jest nazywana klasą pochodną danej klasy bazowej. Proces dziedziczenia może być kontynuowany, tzn. klasa pochodna może być klasą bazową dla kolejnej klasy pochodnej. Klasa pochodna dziedziczy po klasie bazowej wszystkie atrybuty i metody.

class A


{

var $atrybut1;

function operacja1()

{

echo "Wywołana klasa A


";

echo "atrybut1 posiada wartosc $this->atrybut1

";

}

}



class B extends A

{

var $atrybut2;



function operacja2()

{

echo "Wywołana klasa B


";

echo "atrybut2 posiada wartosc $this->atrybut2

";

}

}



//tworzenie obiektu

$b=new B;

$b->atrybut1=5;

$b->operacja1();

$b->atrybut2=10;

$b->operacja2();

?>

Klasa B dziedziczy od klasy A, więc obiekt utworzony z klasy B może odnieść się do operacja1() i $atrybut1, chociaż zostały one zadeklarowane w klasie A.



Dziedziczenie działa tylko w jedną stronę. Podklasa, czyli dziecko dziedziczy własności od swojego rodzica, czyli nadklasy, lecz rodzice nie posiadają własności dziecka.

Unieważnienie

Możliwe jest i czasem użyteczne ponowne zadeklarowanie tych samych atrybutów i operacji. Robi się to w celu nadania atrybutowi podklasy innej domyślnej wartości niż posiada ona w nadklasie lub dla nadania operacji podklasy innej funkcjonalności niż posiada ona w nadklasie. Działania takie nazywane są unieważnieniem.



class A


{

var $atrybut='domyslna wartosc';

function operacja()

{

echo 'Coś


';

echo "Wartość \$atrybut wynosi $this->atrybut


";

}

}



class B extends A

{

var $atrybut='inna wartosc';



function operacja()

{

echo 'Coś innego


';

echo "Wartosc \$atrybut wynosi $this->atrybut


";

}

}



//Zadeklarowana B nie wpływa na oryginalną definicję A

$a=new A;

$a->operacja();

$b=new B;

$b->operacja();

?>

Słowo kluczowe parent

Słowo kluczowe parent umożliwia wywołanie oryginalnych wersji oracji z klasy przodka

class B extends A

{

var $atrybut='inna wartosc';



function operacja()

{

echo 'Coś innego


';

echo "Wartosc \$atrybut wynosi $this->atrybut


";

parent::operacja();//************

}

}

Kontrolowanie widoczności w trakcje dziedziczenia przy użyciu private i protected



Dzięki odpowiedniemu użyciu modyfikatorów dostępu private i protected można kontrolować, które elementy będą podlegać dziedziczeniu. Jeśli atrybut lub metodę zadeklarujemy jako private, element ten nie zostanie odziedziczony. Jeśli natomiast element zostanie zadeklarowany jako protected, nie będzie on widoczny na zewnątrz klasy (podobnie jak element prywatny), lecz zostanie odziedziczony

class A


{

private function operacja1()

{

echo "operacja1 wywołana


";

}

protected function operacja2()



{

echo "operacja2 wywołana


";

}

public function operacja3()



{

echo "operacja3 wywołana


";

}

}



class B extends A

{

function __construct()



{

//$this->operacja1();

$this->operacja2();

$this->operacja3();

}

}

$b=new B;



?>

Zapobieganie dziedziczeniu i unieważnieniu przy użyciu final

Gdy słowo final poprzedzi deklarację funkcji, funkcja te nie będzie mogła być unieważniona w następnych podklasach. Słowo to można dodać np. przed klasą A z poprzedniego przykładu w następujący sposób:



class A


{

var $atrybut='domyślna wartość';

final function operacja()

{

echo "Wartosc \$atrybut wynosi $this->atrybut


";

}

}



class B extends A

{

final function operacja()



{

echo "Ta funkcja nigdy się nie wykona, zostanie wygenerowany błąd


";

}

}



$a=new A;

$a->atrybut=5;

$a->operacja();

$b=new B;

$b->operacja();

//Fatal error: Cannot override final method A::operacja() in C:\wamp\www\Pawel_1\Dziedziczenie5.php on line 17

?>

Podsumowanie dziedziczenia w PHP

PHP nie rozpoznaje wielodziedziczenia. Oznacza to, że każda klasa może dziedziczyć tylko od jednego rodzica. Niema ograniczeń co do liczby dzieci, jaki może posiadać rodzic



Przykład 1. Zastosowanie: klas, obiektów i dziedziczenia

//Plik o nazwie Dziedziczenie6.php

class Strona

{

//atrybuty klasy Strona



public $zawartosc;

public $tytul='MOJA STRONA WWW';

public $przyciski=Array('strona_glowna.php', 'kontakt.php', 'uslugi.php', 'mapa.php');

public function Wyswietl()

{

echo "\n\n";



$this->WyswietlTytul();

echo "\n\n";

$this->WyswietlNaglowek();

$this->WyswietlMenu($this->przyciski);



echo $this->zawartosc;

echo "



©operacji.org 2017
wyślij wiadomość

    Strona główna