Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Реализация конструктора класса


Автор: localhost 17.8.2012, 14:07
Всем доброго здоровья.
Решил для упражнений написать свой велосипед, работающий с API Яндекс.Метрики. Решил также, что буду непременно применять ООП для сих нужд. Концепция, казалось бы, в тему, да и для практики неплохо будет. Если я ошибаюсь - просьба наставить на путь истинный smile

Вобщем, суть такова - хочу получать список счетчиков через API и дальше уже работать с ними (получать статистические данные  и т.п.). 
Примерно так:
Код

class Counter {
    
    var $code_status = array();
    var $site = array();
    var $id = array();
    
    function __construct($token) {
        
        $counter_list = $this->get_counters($token);
        
        foreach ($counter_list['counters'] as $counter) {
            $this->code_status[] = $counter['code_status'];
            $this->site[] = $counter['site'];
            $this->id[] = $counter['id'];
        }
    }
    
    protected function send_request($auth_token, $method_type, $method_name, $parameters = NULL) {
         // Функция подготавливает строку запроса, через cURL отправляет запрос и возвращает результат
    }
    
    protected function get_counters ($token) {
        $json = $this->send_request($token, 'GET', 'counters.json');
        
        return json_decode($json, true);   
    }
    
    function get_report_traffic_summary ($token, $id) {
        $json = $this->send_request($token, "GET", "stat/traffic/summary.json", array("id" => $id));
        
        return json_decode($json, true);   
    }
}


Но в конструкторе у меня получается какой-то неправильный массив:

Код

Counter Object ( 
[code_status] => Array (
     [0] => CS_ERR_CONNECT 
     [1] => CS_OK 
     [2] => CS_OK 
     [3] => CS_OK 
     [4] => CS_OK 
     [5] => CS_OK 
     [6] => CS_OK )  
[site] => Array ( 
     [0] => domain1.ru 
     [1] => domain2.ru 
     [2] => domain3.ru 
     [3] => domain4.ru 
     [4] => domain5.ru 
     [5] => domain6.ru 
     [6] => domain7.ru )
[id] => Array ( 
     [0] => 123321 
     [1] => 234432 
     [2] => 345543
     [3] => 456654 
     [4] => 567765
     [5] => 678876
     [6] => 789987 ) ) 


Т.е. массив массивов. А мне бы хотелось возвращать что-то наподобие массива экземпляров класса. Т.е., чтоб каждый счетчик представлял собой отдельный объект, который можно было бы обойти в цикле, вызвать для него его же методы (например, для просмотра суммарной статистики реализовать метод get_traffic_summary($id), передав ему id текущего объекта).

В конечном же итоге я хочу получить данные для вывода в шаблон, чтобы структурировать их по своему усмотрению (например, для каждого счетчика оформить свой блок, содержащий нужную мне сводку).

Вопроса два всего:
1. Можно ли (и как) вернуть массив объектов?
2. Адекватность хода мыслей.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)