Come posso creare una proprietà da un determinato argomento all'interno del metodo di un oggetto?Come creare dinamicamente una nuova proprietà
class Foo{
public function createProperty($var_name, $val){
// here how can I create a property named "$var_name"
// that takes $val as value?
}
}
E io voglio essere in grado di accedere alla proprietà come:
$object = new Foo();
$object->createProperty('hello', 'Hiiiiiiiiiiiiiiii');
echo $object->hello;
Inoltre è possibile che avrei potuto fare il pubblico di proprietà/protetto/privato? So che in questo caso dovrebbe essere pubblico, ma mi può essere utile per aggiungere alcuni metodi Magik ottenere le proprietà protette e roba :)
Credo di avere trovato una soluzione:
protected $user_properties = array();
public function createProperty($var_name, $val){
$this->user_properties[$var_name] = $val;
}
public function __get($name){
if(isset($this->user_properties[$name])
return $this->user_properties[$name];
}
Sei pensi sia una buona idea?
grazie. Ne ho bisogno all'interno della classe però. È un po 'complicato da spiegare, le proprietà sono in realtà oggetti che sono le estensioni del sito che l'amministratore del sito può abilitare/disabilitare :) Ma userò la mia soluzione, penso che sia meglio tenerle all'interno di un array. – Alex
È possibile impostarli come privati o protetti? –
L'impostazione di proprietà come questa non ci consente di renderlo privato o protetto perché è impostato dal pubblico. Tuttavia, puoi provare a lavorare con i metodi magici OOP '__get()' e '__set()'. Vedi http://stackoverflow.com/questions/4713680/php-get-and-set-magic-methods – mauris