Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Do czego tak na prawdę służy __get i __set ?
Forum PHP.pl > Forum > Przedszkole
piotr3161
Witam,

Rozpoczynam naukę php - obiektowo.
Napotkałem na temat związany z dostępem do atrybutów. Wykorzystując __set i __get.

Przykładowo dwie klasy:

CODE
class ludzie
{
var $imie;
}

$czlowiek = new ludzie();
$czlowiek->imie='Piotrek';
echo $czlowiek->imie;


CODE
class ludziska
{
var $imie;

function __set ($nazwa, $wartosc)
{
$this->nazwa=$wartosc;
}

function __get ($nazwa)
{
return $this->nazwa;
}
}

$czlowieczek = new ludziska();
echo '</br>';
$czlowieczek->imie="Piotrek";
echo $czlowieczek->imie;


Obie klasy wyświetlą napis Piotrek jednak z tego co czytałem __set i __get jest potrzebna i wyłącznie jeśli po za klasą podamy złą nazwe atrybutu klasy? (np $czlowieczek->ktos="Piotrek") ?
SmokAnalog
Kilka uwag:
  1. Dobrym zwyczajem jest nazywanie klas z wielką literą
  2. Ani "Ludzie", ani "Ludziska" to nie jest prawidłowa nazwa klasy. Powinno być w liczbie pojedynczej: Człowiek.
  3. Słowo kluczowe "var" jest przestarzałe, z czasów PHP 4. Zobacz jak się deklaruje zmienne klasowe w PHP 5.

Magiczne metody __get i __set w Twoim przykładzie nie mają sensu, bo efekt będzie taki sam i bez nich. One są po to, żebyś mógł sobie zaprogramować mechanizm odczytu/zapisu pól obiektów. Przykładowym zastosowaniem może być na przykład zapisywanie tych przypisać gdzieś w logu. O wiele ciekawszą moim zdaniem metodą jest __call, która robi to samo, co __get, ale dla metod. Sporo frameworków automatycznie "dodaje" metody o nazwie getCoś, gdzie Coś to nazwa zmiennej klasowej. Te metody tak naprawdę nie istnieją, ale są dynamicznie wychwytywane przez __call i odpowiednio obsłużone.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.