Помогни ни да направим Uroci.net по - богат! Добави урок

PHP - част 7 (Работа с класове)

PHP » PHP
fix3d   трудност:    видян: 12321



Променливата $this
Езикът PHP използва специална променлива $this за осъществяване на достъп до даден клас. Използването на променливата $this в PHP е аналогично на създаването на инстанция на класа в самия клас. Следващия пример е модификация на предишния пример с цел демонстриране на използването на променливата $this.

<?php

class PrintName {
var $name = "George";

function show_name() {
echo "Hi $this -> name.
}}
$obj1 = new PrintName;
$obj1 -> show_name();

?>

В горния пример променливата name се използва директно в метода PrintName с помощта на променливата $this. Резултатът от горния код ще бъде : Hi george.

Също така можете да промените стойността на поле в метод, което е демонстрирано от следващия пример.
<?php

class PrintName {
var $name = "George";

function show_name() {
echo "Hi $this -> name.
}
function change_name($somename) {
$this -> name = $somenaame;
// Промяна на стойността
на полето name от "George" на новото име предадено на метода.
}}
$obj1 = new PrintName;
$obj1 -> show_name();
$obj1 -> change_name ("Pesho");
$obj1 -> show_name();

?>

В горния пример първо на екрана се появява Hi George. , защото се извиква методът show_name() на обекта obj1, а стойността George е стойност по подразбиране за полето name. С реда $obj1 -> change_name ("Pesho"); се извиква методът change_name(), който задава стойността Pesho на полето name. След това се извиква методът show_name(), който на свой ред показва "Hi Pesho".

Както може би сте забелязали, методите на класове, като нормални функции, не се извикват, преди да направите това явно. Това означава, че докато не напишете реда $obg1 -> show_name(), методът show_name(), няма да бъде извикан. В следващата секция, ще научите повече за методите, които се изпълняват автоматично при инстанциране на класа ( т.е. когато се създава обект от класа ).


Конструктори
Конструкторът е специален метод на класа, който се изпълнява автоматично, когато се създава обект от класа. Конструкторът, по дефиниция, трябва да има име, еднакво с името на класа. Това означава, че може да имате само един конструктор в даден клас. Следващият пример демонстрира използването на конструктор.
<?php

class PrintName {
var $name;

function PrintName() {
$this -> name = "Angelica";
echo "Hi $this -> name.
}
function show_name($somename) {
echo "Hi $this ->name !";
}}
$obj1 = new PrintName;
$obj2 = new PrintName;

?>


Резултатът от горната програма, ще бъде двукратно показване на низа "Hi Angelica !". Това е така, защото методът PrintName се изпълнява при всяко създаване на обект от класа PrintName.


Разширяване на клас - наследяване на класове
Най-добрата черта на създаването и използването на класове е възможността да ги използвате повторно. Можете да създадете класа веднъж и след това да го използвате и в другите си програми. Това ви помага да си спестите много време. Езикът PHP, както и много други езици за обектно ориентирано програмиране, разширява преизползваемостта на класовете, чрез реализация на механизма на наследяване. Наследяването ви позволява да създавате нови класове на базата на вече съществуващи. Тази стратегия ви позволява да използвате повторно необходимите методи и променливи в дъщерния клас и същевременно да добавите само допълнителната функционалност, като по този начин пишете по-малко код. Класът, чиито код се използва повторно се нарича родителски клас.

Трябва да използвате ключовата дума extends, за да декларирате, че класът наследява съществуващ клас. Синтаксисът е следния:

име_на_класа extends име_на_родителския_клас

Наследяването се прави от родителския към дъщерния клас. То се изразява в това, че даден обект от дъщерния клас има достъп до полетата и методите на радителския клас, но обектите от родителския клас нямат достъп до дъщерния. С други думи, обектът от родителския клас не може да използва методите и полетата на дъщерния клас. Следващият прост пример е за наследяване в PHP.
<?php

classParentClass {
function show_message() {
echo "Hi! This comes from the parent class.";
}}
class ChildClass extends ParentClass
// Наследяваме класа ChildClass от класа Parent
{
function show() {
echo "Hi This comes from the child class."
} }
$obj1 = new ParentClass;
// Обект от ParentClass.
$obj1 -> show_message ();
// Правилно - тъй като obj1 е обект от
// ParentClass и извиква метод от същия клас
$obj2 = new ChildClass;
// Обект от ChildClass
$obj2 = show();
// Правилно - тъй като обект от класа
// ChildClass има достъп до методите на родителския клас.
$obj2 -> show_message();
// Правилно - тъй като обект от класа
// ChildClass има достъп до методите на родителския клас.
$obj1 -> show();
// Грешно, защото обект от класа ParentClass
// няма достъп до методите на дъщерния клас ChildClass

?>

В горния пример са декларирани два класа - ParentClass и ChildClass. Както се подразбира от името му, класът ChildClass наследява класа ParentClass с помощта на ключовата дума extends. Обектът obj1 е обект от класа ParentClass, а obj2 е от клас ChildClass. Когато обект obj2 извиква метода show_message() на класа ParentClass, на екрана се появява съобщението Hi ! This comes from the parent class.

Това е възможно, защото класът ChildClass е наследник на класа ParentClass и има достъп до полетата и методите му. От друга страна, когато обектът obj1 извика метода show() на дъщерния клас ChildClass, PHP извежда съобщение за грешка. Това е така, защото методите и полетата на наследения клас са недостъпни за родителския клас ParentClass.


източник на урока: http://www4u.search.bg


Страници: «1 2

Сподели урока:



Коментари (2)

stoimenn на 16.05 2009 в 18:24ч.
примерите в урока са изключително неточни, а да не говорим за правописните грешки

примера:



не работи

и това не е само в този урок ами всичките части с уроци са пълни с грешки.
Добрече съм работил с обектно ориентирани езици та поне знам как да оправам грешките ама някой който си няма идея и сега навлиза в нещата просто няма никакъв шанс да разбере от тези примери за какво става дума
valentina6 на 20.12 2009 в 16:20ч.
Този урок е страхотен. Трябваше ми бързо да се ориентирам при създаването на конструктора. На мене много ми помогна.

Регистрирайте се, за да добавите коментар


Калдейта Ком ЕООД - © 2003-. Всички права запазени.
Препоръчваме: IT Новини