Zajímavé články, s prvním nesouhlasím, resp. souhlasím s Larsem Strojnym a bukajem :)
Btw, já to řeším nějak takhle, pokud chci třídu která bude mít možnost setovat property tak ji udělám potomkem
této třídy. Nic však není dokonalé ;)
minusy:
- setters/getters fungují i na privátní properties (funkce property_exists() nerozlišuje)
- zpomalení
Co si o takovém řešení myslíte?
class Core_ObjectWithProperties
{
/**
* Toto je __stub funkce pro settery a gettery tridy.
* Problem - public/private, da se nastavit i private
*/
function __call($fcename,$args)
{
$fce=substr($fcename,0,3);
$var=strtolower(substr($fcename,3,1)).substr($fcename,4);
$cnt=count($args);
switch($fce)
{
case 'set':
if($cnt != 1)
throw(new Exception("setter $fcename() needs exactly ONE parameter!"));
if(!property_exists($this,$var))
throw(new Exception("$fcename() - class variable \$$var does not exists!"));
$this->$var = $args[0];
break;
case 'get':
if($cnt != 0)
throw(new Exception("getter $fcename() does not take any parameter!"));
if(!property_exists($this,$var))
throw(new Exception("$fcename() - class variable \$$var does not exists!"));
return $this->$var;
break;
default:
throw(new Exception("unknown method called: $fcename()"));
}
}
}