Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.06.2011, 13:43   #1
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию __set __get И наследие классов.

у меня есть класс AObject, такой что в нем определены методы сет и гет.
Так же есть класс Ex который extends AObject. Все классы подгружаются при помощи autoload.

Когда я для экземпляра Ex пытаюсь вызвать метод setSomething() или getSomething(), то получаю эксепшн Call to undefined method.

Так же есть методы setData() и getData(), которые определены в том же AObject. Они срабатывают.
Jakethefish вне форума Ответить с цитированием
Старый 30.06.2011, 13:47   #2
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию

Понял ошибку. Мне требовался метод __call.
Jakethefish вне форума Ответить с цитированием
Старый 30.06.2011, 14:08   #3
Jakethefish
Форумчанин
 
Регистрация: 13.11.2009
Сообщений: 121
По умолчанию

Ну это так, мало ли кому пригодится:
Код:
<?php

class AObject {
	private $data;
	public function __construct() {
        $this->data = array();
    }
	public function __set($name, $value) {
		$name = strtolower($name);
        $this->data[$name] = $value;
    }
    public function __get($name) {
		$name = strtolower($name);
        if (array_key_exists($name, $this->data)) {
            return $this->data[$name];
        }else{
			return null;
		}
    }
	public function __call($method, $args) {
		$property = strtolower(substr($method,3));	
		if(substr($method, 0, 3) == 'set'){			
			$this->$property = $args[0];			
		}else if(substr($method, 0, 3) == 'get'){			
			return $this->$property;
		}else{
			throw new MemberAccessException('Method ' . $method . ' not exists');
		}
    }	
	public function setData($field,$value){
		$this->data[$field] = $value;
	}
	public function getData($field){
		if (array_key_exists($field, $this->data)) {
            return $this->data[$field];
        }else{
			return null;
		}
	}
}
?>
Jakethefish вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Наследие С++ Денис999 Помощь студентам 1 21.04.2011 11:46
Наследие С++ Денис999 Помощь студентам 2 17.04.2011 22:02
Наследие Классов. Solrainer7 Общие вопросы Delphi 4 12.07.2010 22:18
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18
обьявление классов пыхонин филипп Помощь студентам 1 21.03.2009 20:10