Вы должны создать класс, реализующий функции, которые вы хотите использовать, и все ваши «переменные» должны быть объектами этого класса. Например:
class Kid {
private $age = 0;
public function _construct($age){
$this->age = $age;
}
public function birthday() { // implement in Kid instead of in Groupmodel
$this->age++;
echo "Growing old... ";
}
public function age($age_new = null){ // age setter and getter
if(!is_null($age_new)){
$this->age = $age_new;
}
return $this->age;
}
}
, а затем внутри groupmodel:
class GroupModel {
private $variables;
public function _set($name, $value) {
if (array_key_exists($name, $this->variables)) {
$this->variables[$name]->age($value);
} else {
$this->variables[$name] = new Kid($value);
}
}
public function _get($name) {
if (array_key_exists($name, $this->variables)) {
return $this->variables[$name];
} else {
return null;
}
}
}
так что вы можете позвонить:
$this->groupmodel = new GroupModel()
$this->groupmodel->var1 = 8
$this->groupmodel->var1->birthday(); // will add 1 to var1's age and print "Growing old"
$this->groupmodel->var1 = 9 // will replace var1's age
Что мы делаем здесь, создает объекты класса Kid автоматически каждый раз при попробуйте установить свойство объекта GroupModel. (Это то, что делает магический метод _set())
Фактически он создает их как элементы частного массива вместо реальных свойств GroupModel.
Затем при попытке получить доступ к этим «свойствам» будет вызван _get(), и он будет извлекать элемент массива и возвращать его.
Как и объект класса Kid, вы можете вызвать любой метод, который он реализует (например, день рождения()).
Для получения дополнительной информации о перегрузке и магических методов, таких как _GET и _set см:
http://www.php.net/manual/en/language.oop5.overloading.php#language.oop5.overloading.members
Это не * ООП *, это попытка сделать ужасные вещи, используя объекты. * ООП * ** - это парадигма, изобретенная для снижения сложности программ, делает программы более понятными, понятными и читаемыми. Но вы хотите что-то, что не позволит следовать всем этим идеям. – zerkms
Фактически, пример, который mazzzzz опубликовал, как-то напоминает подход, который некоторые языки должны выполнять ООП. Вызываемый объект автоматически упоминается как $ this, и это почти все. –
Мне нравится, как тот, кто понятия не имеет, как мои функции программы будут подходить к таким высоким выводам о том, как это сделать *. – Ben