@lucabartoli said:
Allora il problema non è lì...
Posso vedere anche il codice che utilizzi per testare la classe?
ehm un pò lunghetto (incollo qui)
====== CLASSE A (madre) =========
<?php
abstract class propertyObject
{
**protected $_propertyTable = array();**
protected $_changedProperties = array();
protected $_data;
protected $_errors = array();
public function __construct($arData)
{
$this->_data=$arData;
}
function __get($propertyName)
{
if(!array_key_exists($propertyName,$this->_propertyTable))
throw new Exception("Proprietà non valida (get)".$propertyName."!");
if(method_exists($this,'get'.$propertyName))
{
return call_user_func(array($this,'get'.$propertyName));
}else{
return $this->_data[$this->_propertyTable[$propertyName]];
}
}
function __set($propertyName, $value)
{
// Se la proprietà non esiste ERROR ***
if(!array_key_exists($propertyName,$this->_propertyTable))
throw new Exception("Proprietà non valida (set)". $propertyName ."!");
if(method_exists($this,'set'.$propertyName))
{
return call_user_func(array($this,'set'.$propertyName),$value);
}else{
if($this->_propertyTable[$propertyName]!=$value && !in_array($propertyName,$this->_changedProperties))
{
$this->_changedProperties[]=$propertyName;
}
$this->_data[$this->_propertyTable[$propertyName]]=$value;
}
}
}// fine classe
?>
====== CLASSE A (madre - fine) =========
====== CLASSE B (figlia) =========
require_once('clss_PropertyObject.php'); // <--- Classe A
class Utente extends propertyObject
{
public function __construct($u_ID=0)
{
if($u_ID!=0)
{
$arData=DataManager::getUtenteData($u_ID);
parent:: __construct($arData);
}
$this->_propertyTable['id']='ute_id';
$this->_propertyTable['tipo']='ute_tipo';
$this->_propertyTable['stato']='ute_stato';
$this->_propertyTable['num_casuale']='ute_caso';
$this->_propertyTable['nome']='ute_nome';
$this->_propertyTable['cognome']='ute_cognome';
$this->_propertyTable['my_mail']='ute_mail';
}
}
====== CLASSE B (figlia- fine) =========
====== CLASSE C (nipote) =========
require_once('clss_Utente.php'); // <--- Classe B
class c_utenteAr extends Utente
{
public function __construct($a_ID=0)
{
if($a_ID!=0)
{
$arData=DataManager::getArmatoreData($a_ID);
parent:: __construct($arData);
}
$this->_propertyTable['sito_web']='ute_website';
$this->_propertyTable['stato']='ute_stato_name';
$this->_propertyTable['comune']='ute_comune_name';
$this->_propertyTable['data_nascita']='ute_birthdate';
}
}
====== CLASSE C (nipote - fine) =========
Ora ... se istanzio
$x = new UtenteAr(); // tutto ok
$x->tipo='mio_tipo'; // Errore nella procedura __set('tipo')! Proprietà inesistente