PHP/Metody magiczne: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m dodanie nawigacji + info, że rozdział jest do przepisania. |
rozpoczęcie prac nad rozdziałem. |
||
Linia 1:
<div class="noprint">{{prognaw|PHP|[[../Elementy statyczne|Elementy statyczne]]|[[../Iteratory|Iteratory]]}}</div>
== Metody magiczne ==
W każdej klasie możemy utworzyć szereg metod, które będą traktowane w specjalny sposób przez PHP. Zwyczajowo nazywa się je ''metodami magicznymi'', gdyż wywołuje je interpreter w odpowiedzi na różne zdarzenia, a nie programista. Można je poznać po tym, że ich nazwy zaczynają się od dwóch podkreśleń, co oznacza, że dwie takie metody powinniśmy już kojarzyć. Są to <code>__construct()</code> oraz <code>__destruct()</code> wywoływane automatycznie przy tworzeniu i niszczeniu obiektu. To jednak tylko czubek góry lodowej.
=== Dostęp do pól obiektu ===
{▼
private $nazwa = "";▼
public function __construct($nazwa)▼
{▼
return $this->nazwa;▼
Gdy próbujemy odwołać się do nieistniejącego pola klasy, PHP zazwyczaj generuje komunikat '''E_NOTICE'''. Dzięki metodom <code>__get()</code> oraz <code>__set()</code> możemy zaprogramować własną akcję i wykorzystać to do swoich celów.
{{Definicja|Metoda <code>__get()</code> przyjmuje dokładnie jeden argument będący nazwą pola, które próbujemy odczytać i powinna zwrócić wartość, która będzie zaprezentowana użytkownikowi jako wartość tego pola.}}
{{Definicja|Metoda <code>__set()</code> przyjmuje dokładnie dwa argumenty: nazwę pola oraz wartość, którą użytkownik próbuje do niego przypisać.}}
Przyjrzyjmy się naszemu stale ulepszanemu systemowi konfiguracji. Odwoływanie się do opcji konfiguracyjnych przez <code>$config->get('nazwa')</code> jest odrobinę niewygodne. Dlatego zasymulujemy, że poszczególne opcje są dostępne jako pola klasy. Poniżej pokazany jest fragment klasy '''Config''' z nową metodą:
<source lang="php" line highlight="17"><?php
class Config implements Countable
▲{
private $_awaitingLoaders = array();
▲ {
} // end count();
// pozostała część klasy
} // end Config;
$config = new Config;
$config->addLoader(new FileConfigLoader('./config.ini.php'));
echo $config->websiteTitle;
</source>
Metoda <code>__get</code> wywoływana jest w podświetlonej linijce, gdy próbujemy dostać się do nieistniejącego pola. PHP pobiera jej wynik i zwraca skryptowi jako jego wartość. Jednocześnie ponieważ nie chcemy, aby ktoś modyfikował konfigurację, nie udostępniamy metody <code>__set()</code> wywoływanej przy próbie przypisania nieistniejącemu polu jakiejś wartości.
{{stub}}
=== Wywoływanie metod ===
=== Klonowanie obiektów ===
=== Serializacja obiektów ===
=== Rozszerzony dostęp do pól obiektów ===
== Zakończenie ==
|