Potrzebuję pomocy w zrozumieniu w jaki sposób kontrolować dane wejściowe w odpowiednich klasach.
Dopiero raczkuję z obiektowym więc porszę o wyrozumiałość...
Stworzyłem interfejs Validator z funkcją validate()
Interfejs jest zaimplementowany w klasie PropertyObject która wygląda tak:
<?php abstract class PropertyObject implements Validator { /** Aggregations: */ /** Compositions: */ /*** Attributes: ***/ /** * * @access protected */ protected $data; public function __construct($arData){ $this->data=$arData; } function __get($propertyName){ throw new Exception("Błędna własność \"$propertyName\"!"); if(method_exists($this, 'get'.$propertyName)){ } else { //print ('nie ma funkcji '.$propertyName.'<br>'); return $this->data[$this->propertyTable[$propertyName]]; } } function __set($propertyName, $value){ throw new Exception("Błędna własność \"$errors[$propertyName]\""); if(method_exists($this, 'set'.$propertyName)){ return call_user_func( $value ); } else { //jeżeli wartość własności uległa zmianie i nie ma jej //jeszcze w tabeli chengedProperties, zostanie do niej dołączona if($this->propertyTable[$propertyName]!=$value && $this->changedProperties[]=$propertyName; } $this->data[$this->propertyTable[$propertyName]] = $value; } } /** * * * @return * @access public */ function validate( ) { } // end of member function validate } // end of PropertyObject ?>
Dziedziczę klasę w konkretnym obiekcie np:
<?php class WareHouse extends PropertyObject { /** Aggregations: */ /** Compositions: */ /*** Attributes: ***/ /** * * @access private * private $entity = array(); private $id_warehouse; */ public function __construct($id_warehouse){ $this->propertyTable['WareHouseID']=$id_warehouse; } .... public function validate(){ if(!$this->WareHouseID){ $this->errors['WareHouseID']='Brak id dla magazynu'; } return false; } else { return true; } } } // end of WareHouse ?>
Do tablicy errors[] zbieram informacje o ewentualnych błędach.
Przykład jest przerobiony z książki niestety nie mam tam informacji jak w tym przykładzie wyciągnąć dane z tej tablicy - w przypadku gdy nie jest ona pusta.
Dodam, że mam inne klasy które w zasadzie składają się na obiekt WareHouse i tam również implementuję funkcję validate()
Pytanie które mnie gnębi to jak tego użyć? Tak aby w przypadku wprowadzenia błędnych danych pojawiała się odpowiednia informacja.