Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Хитрая манипуляция с классами - помогите! 
:(
    Опции темы
Win MK 32
Дата 11.9.2012, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

Репутация: нет
Всего: нет



Вот код. Первая функция работает, вторая нет. Я хотел бы во второй вывести все объекты из классов, которые создал скрипт. Как это можно правильно сделать?
Код

class classes{
// ...
    function get_classes(){
        $declared_classes = get_declared_classes();        
        $class_classes_id = array_search("classes",$declared_classes);
        foreach($declared_classes as $k => $v){
            if($k>$class_classes_id){
                $cms_declared_classes[] = $v;
            }
        }
        return $cms_declared_classes;
    }

    function get_objects(){
        $declared_classes = get_declared_classes();        
        $class_classes_id = array_search("classes",$declared_classes);
        foreach($declared_classes as $k => $v){
            if($k>$class_classes_id){
                $cms_declared_classes[] = $v;
            }
        }
        foreach($cms_declared_classes as $k => $v){
            if((object)$$v instanceof $v){
                $cms_objects[] = $v;
            }
        }
        return $cms_objects;
    }
}
$cms = new classes("vars,db,debug,files","vars,db,debug");
echo "классы:";
dump($cms->get_classes());
echo "объекты:";
dump($cms->get_objects());

PM   Вверх
Win MK 32
Дата 11.9.2012, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

Репутация: нет
Всего: нет



Я научился уже получать список объявленых классов (данные предоставляет метод класса). 
Теперь хотел бы точно так же через метод класса получать список всех объектов всех классов, тех, что создал я, а не какие-то встроенные в PHP до меня. 

P.S. Можно хотя бы заставить работать функцию get_defined_vars() внутри метода класса? Даже "global $GLOBALS" не помогает, хотя это смешно звучит.
PM   Вверх
ksnk
Дата 11.9.2012, 22:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



сделай get_declared_classes ДО вызова всех инклюдов, потом array_dif этого массива и нового значения get_declared_classes после всех инклюдов и описаний. Это не оно?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Win MK 32
Дата 11.9.2012, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 492
Регистрация: 15.7.2002

Репутация: нет
Всего: нет



Нашел решение
Код

    function get_objects(){
        $classes = $this->get_classes();
        foreach($classes as $k => $v){
            if(is_object($GLOBALS[$v])){
                $objects[] = $GLOBALS[$v];
            }
        }
        return $objects;
    }


Немного не понял. Что значит до инклюдов? Вы мой страшный класс загрузки классов еще не видели. Там каждый класс инклюдится и(опционально) на его основе создается одноименный объект. Работал над этим я неделю и было это год назад, теперь есть куда воткнуть такой подход. И я стал его дорабатывать.
PM   Вверх
ksnk
Дата 11.9.2012, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 1
Всего: 386



Цитата(Win MK 32 @  11.9.2012,  23:03 Найти цитируемый пост)
Что значит до инклюдов?

Самыми первыми строчками index.php (или где там еще) вызвать и сохранить. 

Если все классы заводятся только с помощью get_classes, то проще завести статический элемент-массив в classes и хранить список загруженных классов в нем.

Можно, также, воспользоваться тем, что все классы появляются в get_declared_classes в порядке их объявления. Так что всего и нужно - найти класс, который объявляется первым и вывести все, что после-включая его.

Глобальными пользоваться некошерно  smile Значительно более кошерно, вместо $GLOBALS использовать статические элементы класса.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0662 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.