Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Prośba o sprawdzenie klasy
Jarod
post
Post #1





Grupa: Zarejestrowani
Postów: 1 190
Pomógł: 27
Dołączył: 23.04.2005

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


W książce natrafiłem na przykład, który wydaje mi się błędny. Wiem, że książki helionu mają literówki i różnego rodzaju błędy (na stronie helionu w erracie nie ma poprawki do tego), dlatego proszę o sprawdzenie poniższego kodu.


  1. <?php
  2. interface Validator{
  3. abstract function validate();
  4. }
  5. ?>


  1. <?php
  2. require_once('interface.Validator.php');
  3.  
  4. abstract class PropertyObject implements Validator {
  5.  
  6. protected $propertyTable = array();  //Przechowuje pary nazwa-wartość przypisujące
  7. //własności do pól bazy danych
  8. protected $changedProperties = array(); //Lista własności które zostały zmodyfikowane
  9. protected $data; //Dane z bazy
  10. protected $errors = array();
  11.  
  12. public function __construct($arData) {
  13. $this->data = $arData;
  14. }
  15.  
  16. function __get($propertyName) {
  17. if (!array_key_exists($propertyName, $this->propertyTable))
  18. throw new Exception('Błędna własność '.$propertyName.'!');
  19.  
  20. if (method_exists($this, 'get' , $propertyName)) {
  21. return call_user_func(array($this, 'get' , $propertyName));
  22. }
  23. else { 
  24. return $this->data[$this->propertyTable[$propertyName]];
  25. }
  26. }
  27.  
  28.  
  29. function __set($propertyName, $value) {
  30. if (!array_key_exists($propertyName, $this->propertyTable))
  31. throw new Exception('Błędna własność '. $propertyName.' !');
  32.  
  33. if (method_exists($this, 'set' , $propertyName)) {
  34. return call_user_func(array($this, 'set' , $propertyName), $value);
  35. }
  36. else { 
  37. if ($this->propertyTable[$propertyName] != $value &&
  38.  !in_array($propertyName, $this->changedProperties)) {
  39.  $this->changedProperties[] = $propertyName;
  40. }
  41.  
  42. $this_>data[$this->propertyTable[$propertyName]] = $value;
  43. }
  44. }
  45.  
  46. function validate() {
  47.  
  48. }
  49. }
  50. ?>


I teraz ten kod gdzie podejrzewam, że jest błąd..

  1. <?php
  2. reguire_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. $this->propertyTable['addressid'] = 'adres_id';
  12. $this->propertyTable['id'] = 'adres_id';
  13. $this->propertyTable['entityid'] = 'jednostka_id';
  14. $this->propertyTable['address1'] = 'sadres1';
  15. $this->propertyTable['address2'] = 'sadres2';
  16. $this->propertyTable['city'] = 'smiasto';
  17. $this->propertyTable['zipcode'] = 'skod';
  18. $this->propertyTable['type'] = 'styp';
  19. }
  20.  
  21.  
  22.  function validate () {
  23.  
  24.  if (strlen($this->zipcode) != 6) {
  25.  $this->errors['zipcode'] = 'Należy podać poprawny kod pocztowy.';
  26.  } 
  27.  
  28.  if ($this->address1) {
  29.  $this->errors['address1'] = 'Adres to pole wymagane';
  30.  } 
  31.  
  32.  if ($this->city) {
  33.  $this->errors['city'] = 'Miasto to pole wymagane';
  34.  } 
  35.  
  36.  if (sizeof($this->errors)) {
  37.  return false;
  38.  } else {
  39.  return true;
  40.  }
  41.  
  42.  }
  43. }
  44. ?>


Wydaje mi się, że błąd jest w metodzie validate(). Autor odwołuje suię w ten sposób
  1. <?php
  2. if ($this->address1) {
  3.  $this->errors['address1'] = 'Adres to pole wymagane';
  4.  }
  5. ?>


a powinno być chyba
  1. <?php
  2. if ($this->propertyTable['address1']) {
  3.  $this->errors['address1'] = 'Adres to pole wymagane';
  4.  }
  5. ?>


jeśli nie to dlaczego właśnie tak?
Go to the top of the page
+Quote Post

Posty w temacie
- J4r0d   Prośba o sprawdzenie klasy   16.08.2006, 09:37:12
- - envp   Zauważ, że masz funkcje __get() oraz __set() - pie...   16.08.2006, 11:26:57
- - Ludvik   Nie podoba mi się ten kod. Po pierwsze właściwość ...   16.08.2006, 14:29:31
|- - J4r0d   Cytat(Ludvik @ 16.08.2006, 13:29 ) Nie po...   17.08.2006, 09:35:12
- - Ludvik   Przepisałeś błędnie niektóre wywołania metod. Zami...   17.08.2006, 09:58:06
|- - J4r0d   Cytat(Ludvik @ 17.08.2006, 08:58 ) Przepi...   17.08.2006, 10:07:49
- - Ludvik   Powinno być [PHP] pobierz, plaintext <?phpmetho...   17.08.2006, 10:27:55
|- - J4r0d   Cytat(Ludvik @ 17.08.2006, 09:27 ) Powinn...   17.08.2006, 19:36:35
- - Ludvik   $this jest referencją do obiektu, którego met...   17.08.2006, 20:50:09
- - J4r0d   Analizuje ten przykład jeszcze raz i mam wrażenie,...   21.08.2006, 10:54:55
- - Ludvik   Tak też może być. Autor klasy zakładał, że nawet w...   21.08.2006, 11:15:47
|- - J4r0d   Cytat(Ludvik @ 21.08.2006, 10:15 ) Tak te...   21.08.2006, 16:49:32
- - Ludvik   CytatPo co? Jak istnieje metoda to ją wykonujesz a...   21.08.2006, 17:57:31
|- - J4r0d   Cytat(Ludvik @ 21.08.2006, 16:57 ) Nie od...   21.08.2006, 18:08:50
- - Ludvik   Mylisz się. Przeanalizuj dobrze kod. Żeby wywołać ...   21.08.2006, 19:12:02
|- - J4r0d   Cytat(Ludvik @ 21.08.2006, 18:12 ) Czyli ...   21.08.2006, 19:38:06
- - Ludvik   CytatOk - zgadza się. Ale skąd wiesz, że metoda do...   21.08.2006, 19:46:59
- - J4r0d   Cytat(Ludvik @ 21.08.2006, 18:46 ) (..)a ...   21.08.2006, 21:11:39


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

 



RSS Aktualny czas: 24.12.2025 - 20:48