Witam,
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
$propertyTable =array (); protected
$changedProperties= array(); protected $data;
protected
$errors = array();
public function __construct($arData){
$this->data=$arData;
}
function __get($propertyName){
throw new Exception("Błędna własność \"$propertyName\"!");
if(method_exists($this, 'get'.$propertyName)){
return call_user_func
(array($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(
array($this,'set'.$propertyName), $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 &&
!in_array($propertyName,$this->changedProperties)){ $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;
*/
private $category = array();
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.
Ten post edytował dantekir 19.06.2009, 14:52:09