Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Chyba nie rozumiem fragmentu kodu z książki o php
-poczatkujacyoop-
post 28.06.2012, 15:54:41
Post #1





Goście







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ę?
Go to the top of the page
+Quote Post
droslaw
post 28.06.2012, 16:09:19
Post #2





Grupa: Zarejestrowani
Postów: 98
Pomógł: 33
Dołączył: 10.05.2011
Skąd: Krak

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
-poczatkujacyoop-
post 28.06.2012, 16:16:46
Post #3





Goście







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.
Go to the top of the page
+Quote Post
-poczatkujacyoop-
post 28.06.2012, 16:20:46
Post #4





Goście







Już rozumiem. Źle rozumiałem przeznaczenie tej tablicy. W kolejnym podrozdziale był kod
  1. ...
  2. $this->propertyTable['addressid']='adres_id';
  3. ...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 09:02