Класове и обекти (php 5) в това упражнение се описва технологията за работа с класове и обекти в ph class



Дата19.07.2017
Размер294.9 Kb.
#26028

Класове и обекти (PHP 5)


В това упражнение се описва технологията за работа с класове и обекти в PHP5.

1. class


Всяка дефиниция на клас започва с ключовата дума class, последвана от името на класа, което може да бъде всяко име, което не е запазена дума в PHP. Следват чифт фигурни скоби, между които се поставя дефиницията на свойствата и методите на класа. Псевдо-променливата $this е налична, когато се извиква дадено свойство или метод от тялото на класа. $this представлява референция към извикания обект (обикновено обекта, на който принадлежи метода, но може да бъде и друг обект, ако методът се извиква статично в контекста на вторичния обект). Това е илюстрирано в следните примери:

class A


{

function foo()

{

if (isset($this)) {



echo '$this е дефинирана (';

echo get_class($this);

echo ")\n";

} else {


echo "\$this не е дефинирана.\n";

}

}



}
class B

{

function bar()



{

A::foo();

}

}
$a = new A();



$a->foo();

A::foo();

$b = new B();

$b->bar();

B::bar();

?>


Примерът по-горе ще изведе:

$this е дефинирана (a)

$this не е дефинирана.

$this е дефинирана (b)

$this не е дефинирана.









Пример 1. Проста дефиниция на клас

class SimpleClass

{

// дефиниция на свойство



public $var = 'стойност по подразбиране';
// дефиниция на метод

public function displayVar() {

echo $this->var;

}

}



?>




Стойността по подразбиране трябва да е константен израз, не (примерно) променлива, метод на клас или извикване на функция.

Пример 2. Стойност по подразбиране за член на клас

class SimpleClass

{

// невалидни декларации на членове:



public $var1 = 'hello '.'world';

public $var2 = <<

hello world

EOD;


public $var3 = 1+2;

public $var4 = self::myStaticMethod();

public $var5 = $myVar;

// валидни декларации на членове:

public $var6 = myConstant;

public $var7 = self::classConstant;

public $var8 = array(true, false);

}

?>






Забележка: Разработени са много удобни функции за работа с класове и обекти, които ще бъдат представени в частта Функции за класове и обекти.

2. new


За да бъде създадена инстанция на клас, трябва да се създаде нов обект и да се присвои на променлива. Когато се създава обект, той винаги ще бъде присвоен на променливата, освен ако няма конструктор, който да хвърля изключение при грешка. Класовете трябва да бъдат дефинирани преди да се могат да се инстанциират (а в някои случаи това е задължително).

Пример 1-3. Създаване на инстанция

$instance = new SimpleClass();

?>





В контекста на клас може да се създаде нов обект посредством new self и new parent.

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



Пример -4. Присвояване на обект

$assigned = $instance;

$reference =& $instance;
$instance->var = '$assigned ще приеме тази стойност';
$instance = null; // $instance и $reference приемат стойност null
var_dump($instance);

var_dump($reference);

var_dump($assigned);

?>


Примерът по-горе ще изведе:

NULL

NULL


object(SimpleClass)#1 (1) {

["var"]=>

string(30) "$assigned ще приеме тази стойност"

}




3. extends


Даден клас може да наследи свойства и методи от друг клас, чрез използването на ключовата дума extends. Не се поддържа множествено наследяване, т.е. даден клас може да има само един базов клас.

Всички наследени свойства и методи могат да бъдат предефинирани, чрез повторното им дефиниране със същото име, с което са били дефинирани в родителския клас. Изключение се явяват случаите, когато в родителския клас даден метод е дефиниран като final. Достъпът до предефинираните свойства или до статичните методи на родителския клас се осъществява чрез ключовата дума parent::



Пример 1-5. Просто наследяване на клас

class ExtendClass extends SimpleClass

{

// Предефиниране на родителския метод



function displayVar()

{

echo "Наследяване на клас\n";



parent::displayVar();

}

}


$extended = new ExtendClass();

$extended->displayVar();

?>


Примерът по-горе ще изведе:

Наследяване на клас

стойност по подразбиране





Примери за изпълнение:


1.





class Person

{

function __construct($name){



$this->name=$name;

//$this->age=$age;

}

function getName(){



return $this->name;

}

protected $name;



protected $age;

}

$John = new Person("John");



$Peter = new Person("Peter");

$x= $John->getName();

echo $x;

//echo Peter->getName();



?>


Сподели с приятели:




©obuch.info 2024
отнасят до администрацията

    Начална страница