Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Chyba nie rozumiem fragmentu kodu z książki o php
Forum PHP.pl > Forum > Przedszkole
poczatkujacyoop
Witam. Mam książkę z helionu "PHP. Zaawansowane programowanie" i jest tak taki kod:
  1. <?php
  2. require_once('interface.Validator.php');
  3.  
  4. abstract class PropertyObject implements Validator {
  5.  
  6. protected $propertyTable = array(); // Przechowuje pary nazwa-wartość
  7. // przypisujące własności do
  8. // pól bazy danych
  9. protected $changedProperties = array(); // Lista własności, które zostały
  10. // zmodyfikowane
  11.  
  12. protected $data; // Dane z bazy danych
  13.  
  14. protected $errors = array(); // Ewentualne błędy walidacji
  15.  
  16. public function __construct($arData) {
  17. $this->data = $arData;
  18. }
  19.  
  20. function __get($propertyName) {
  21. if(!array_key_exists($propertyName, $this->propertyTable))
  22. throw new Exception("Błędna własność \"$propertyName\"!");
  23.  
  24. if(method_exists($this, 'get' . $propertyName)) {
  25. return call_user_func(array($this, 'get' . $propertyName));
  26. } else {
  27. return $this->data[$this->propertyTable[$propertyName]];
  28. }
  29. }
  30.  
  31. function __set($propertyName, $value) {
  32. if(!array_key_exists($propertyName, $this->propertyTable))
  33. throw new Exception("Błędna własność \"$propertyName\"!");
  34. if(method_exists($this, 'set' . $propertyName)) {
  35. return call_user_func(
  36. array($this, 'set' . $propertyName),
  37. $value
  38. );
  39. } else {
  40.  
  41. // Jeśli wartość własności uległa zmianie i nie ma jej
  42. // jeszcze w tabeli changedProperties, zostaje do niej dołączona
  43. if($this->propertyTable[$propertyName] != $value &&
  44. !in_array($propertyName, $this->changedProperties)) {
  45. $this->changedProperties[] = $propertyName;
  46. }
  47.  
  48. // Przypisuje nową wartość
  49. $this->data[$this->propertyTable[$propertyName]] = $value;
  50.  
  51. }
  52. }
  53.  
  54. function validate() {
  55.  
  56. }
  57.  
  58. }
  59. ?>


Fragment którego nie rozumiem to:
  1. return $this->data[$this->propertyTable[$propertyName]]


Skoro propertyTable to tablica przechowująca dane w postaci nazwa-wartość to dla przykładowych danych nazwa: 'imie', wartość: 'Piotrek', będzie to wyglądało tak:

  1. return $this->data[$this->propertyTable['imie']]


czyli

  1. return $this->data['piotrek']


Wydaję mi się, że w tablicy $data nie będzie takiego klucza jak 'piotrek'. Czy mógłby mi ktoś wyłumaczyć o co chodzi, albo co źle rozumuję?
droslaw
Dobrze interpretujesz ten fragment. Do własności data przypisujesz dane w konstruktorze. Możesz też dodawać w taki sposób:
  1. $object->property = $value;

dzieki metodzie __set.
Musisz tylko w klasie potomnej wypełnic pole $propertyTable odpowiednimi danymi.
poczatkujacyoop
No, ale jaki ma sens zwrócenie $data['piotrek']? Dla danych nazwa: ulubiona_potrawa, wartość: kalafior funkcja zwróci $data['kalafior']. Chyba, że źle rozumuję przeznaczenie tablicy $propertyTable.
poczatkujacyoop
Już rozumiem. Źle rozumiałem przeznaczenie tej tablicy. W kolejnym podrozdziale był kod
  1. ...
  2. $this->propertyTable['addressid']='adres_id';
  3. ...
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.