Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z $this
Sa1rus
post 20.08.2010, 14:27:22
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.06.2008

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


Witam,
Mam problem z przykładem z książki PHP5. Zaawansowane programowanie.
Czy mogłby mi ktoś wytłumaczyć o co chodzi z $this, poniżej podaje kod...

  1. <?php
  2. require_once('class.PropertyObject.php');
  3.  
  4. class Address extends PropertyObject {
  5.  
  6. function __construct($addressid) {
  7. $arData = DataManager::getAddressData($addressid);
  8.  
  9. parent::__construct($arData);
  10.  
  11. // PropertyTable przechowuje pary nazwa-wartość przypisujące własności do pól bazy danych
  12.  
  13. $this->propertyTable['addressid'] = 'adres_id';
  14. $this->propertyTable['id'] = ' adres_id ';
  15. $this->propertyTable['entityid'] = 'jednostka_id';
  16. $this->propertyTable['address1'] = 'sadres1';
  17. $this->propertyTable['address2'] = 'sadres2';
  18. $this->propertyTable['city'] = 'smiasto';
  19. $this->propertyTable['zipcode'] = 'skod';
  20. $this->propertyTable['type'] = 'styp';
  21. }
  22.  
  23. function validate() {
  24. if(strlen($this->zipcode) != 6) {
  25. $this->errors['zipcode'] = 'Należy podać poprawny kod pocztowy.';
  26.  
  27. ...
  28. }


Czy w funkcji validate() nie powinno być $this->PropertyTable['zipcode'] !=6 ?
Przecież (przynajmniej tak mi się wydaje) $this powinno odwoływać się do właściwości klasy, a zmienna zipcode sama w sobie nie zostala zadeklarowana.

Czy mógłby mi ktoś to jakoś wytłumaczyć ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
wookieb
post 20.08.2010, 14:29:38
Post #2





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Poczytaj o magicznych metodach __get i __set, które prawdopodobnie zostały użyte w PropertyObject.
Musisz nam podać kod PropertyObject abyśmy mogli stwierdzić jak naprawdę się to odbywa.


--------------------
Go to the top of the page
+Quote Post
Sa1rus
post 20.08.2010, 14:35:02
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.06.2008

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


  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. ?>
Go to the top of the page
+Quote Post
wookieb
post 20.08.2010, 14:37:47
Post #4





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




Czyli miałem rację.


--------------------
Go to the top of the page
+Quote Post
Sa1rus
post 20.08.2010, 14:43:09
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 5.06.2008

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


A mozesz swoja odpowiedz jakos rozwinac ?
Go to the top of the page
+Quote Post
wookieb
post 20.08.2010, 14:45:09
Post #6





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




http://pl2.php.net/__get
http://pl2.php.net/__set


--------------------
Go to the top of the page
+Quote Post
Crozin
post 20.08.2010, 15:07:49
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Jeszcze odnośnie:
Cytat
Przecież (przynajmniej tak mi się wydaje) $this powinno odwoływać się do właściwości klasy
$this nie odwołuje się do właściwości obiektu (nie myl go z klasą), a do samego obiektu - jest to referencja do niego.
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: 20.07.2025 - 06:13