Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Хитрая манипуляция с классами - помогите!
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2012
Помог: 0 раз(а)
Вот код. Первая функция работает, вторая нет. Я хотел бы во второй вывести все объекты из классов, которые создал скрипт. Как это можно правильно сделать?
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Обьект это обычная переменая, нет такой функции которая возвращал бы список переменых в отличии от класов. У меня есть такой вариант пройти масив $GLOBALS в цикле и проверять тип переменой на принадлежность к даному класу. (Добавление)
Заинтересовала меня эта тема, поэтому решил сам попробовать. Вот вобщем пример
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
M-K
Отправлено: 11 Сентября, 2012 - 22:18:53
Новичок
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2012
Помог: 0 раз(а)
МИНУТОЧКУ!!! Все должно работать через методы некого хитрого класса классов, который у меня назван "classes".
Я научился уже получать список объявленых классов (данные предоставляет метод класса).
Теперь хотел бы точно так же через метод класса получать список всех объектов всех классов, тех, что создал я, а не какие-то встроенные в PHP до меня.
P.S. Можно хотя бы заставить работать функцию get_defined_vars() внутри метода класса? Даже "global $GLOBALS" не помогает, хотя это смешно звучит.
OrmaJever
Отправлено: 11 Сентября, 2012 - 22:23:56
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
M-K пишет:
Теперь хотел бы точно так же через метод класса получать список всех объектов всех классов, тех, что создал я, а не какие-то встроенные в PHP до меня.
В чём проблема? тот код что я написал вставить в ваш метод и посмотреть результат. И что значит встроеные до вас? Когда запускается скрипт то не существует ни одной переменой кроме глобальной т.е. и обьектов не существует.
Ах да, если вам нужно взять все обьект, а не только принадлежащие определёному класу то можно проверять их функцией is_object()
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
M-K
Отправлено: 11 Сентября, 2012 - 23:01:17
Новичок
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2012
Помог: 0 раз(а)
Спасибо, что напомнили про эту функцию.
В общем, вот решение:
function get_objects(){
$classes = $this->get_classes();
foreach($classes as $k => $v){
if(is_object($GLOBALS[$v])){
$objects[] = $GLOBALS[$v];
}
}
return $objects;
}
caballero
Отправлено: 11 Сентября, 2012 - 23:11:31
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Теперь хотел бы точно так же через метод класса получать список всех объектов всех классов, тех, что создал я, а не какие-то встроенные в PHP до меня.
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2012
Помог: 0 раз(а)
Ну объясняю логику тогда. Предположим сразу, что вариант "прочитать код и все увидеть своими глазами" не годится. Поэтому будем выводить данные по запросу программиста. Часть классов он просто подключает через класс classes (один из главных классов системы). А часть он даже... а из их части он создает объекты (не он, а класс classes по его команде). И вот первая функция выводит классы какие он имеет возможность использовать для создания объектов. А вторая - выводит список объектов, которые были созданы через список классов, который он подал конструкторскому методу класса classes. Зачем все это? Для того чтобы не писать 100 раз "%samename%". new ."%samename%", ну вы поняли. (Добавление)
Ну а вот на десерт, вывод всех возможностей класса! Очень наглядно. Только это старая версия, построеная на философии echo нежели return
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
caballero пишет:
Даже не представляю какой в этом смысл
Смысл есть, например какойнибудь оптимизатор или просто логер для php скрипта.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
digi
Отправлено: 12 Сентября, 2012 - 00:26:57
Посетитель
Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012
Помог: 4 раз(а)
OrmaJever пишет:
Смысл есть, например какойнибудь оптимизатор или просто логер для php скрипта.
можно по подробнее? какой именно оптимизатор или логгер? ;)
OrmaJever
Отправлено: 12 Сентября, 2012 - 00:40:05
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
Ну к примеру зделать функцию которая исчет два или более обьектов одного класса и если находит то выводит например свой рукописный нотис, и если скрипт пишут несколько человек то когда случайно кто-то создаст лишнюю копию обьекта то он увидит нотис в котором будет имя переменой с уже созданым обьектом и он сможет подправить скрипт. Это что качается оптимизатора, а теперь про логер.
Я часто сталкивался с тем что работа популярных цмс слишком медленая и затратная поэтому пишем функцию которая запишет в файл все переменые их размер и возможно повторяющиеся значения и прочее что может понадобится для оптимизации, ну и вызываем эту функции снова в конце файла. Здесь информация об обьектах это только часть идеи но она тоже имеет место быть для более полной картины происходящего.
PS. это всё просто идеи для улушения жизни, они могут быть бесмыслеными, а могут и принести пользу и сэкономить кучу времени.
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
caballero
Отправлено: 12 Сентября, 2012 - 00:56:07
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Предположим сразу, что вариант "прочитать код и все увидеть своими глазами" не годится. Поэтому будем выводить данные по запросу программиста. Часть классов он просто подключает через класс classes (один из главных классов системы). А часть он даже... а из их части он создает объекты (не он, а класс classes по его команде). И вот первая функция выводит классы какие он имеет возможность использовать для создания объектов. А вторая - выводит список объектов, которые были созданы через список классов, который он подал конструкторскому методу класса classes. Зачем все это? Для того чтобы не писать 100 раз "%samename%". new ."%samename%", ну вы поняли
Полная чушь. Вы даже не понимаете разницу между редактированием программы и ее выполнением. (Добавление)
Цитата:
Ну к примеру зделать функцию которая исчет два или более обьектов одного класса и если находит то выводит например свой рукописный нотис,
А ничего что создание нескольких екземпляров класса- это в порядке вещей. Даже если это один и тот же екземпляр - в 99.9% случаев это будет екземпляры в другом месте и в другое время.
А что качсается оптимизации то профилировщик и так покажет какая функция сколько времени выполняется и сколько раз вызывается
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2012
Помог: 0 раз(а)
caballero пишет:
"%samename%". new ."%samename%"
Скорее всего это вы не поняли вот это. Точнее вы поняли это буквально. А я говорил в образном смысле ;) И как раз это вас и смутила, потому вы назвали это чушью.
caballero пишет:
А ничего что создание нескольких екземпляров класса- это в порядке вещей. Даже если это один и тот же екземпляр - в 99.9% случаев это будет екземпляры в другом месте и в другое время.
Конечно ничего. Там же нету запрета еще раз создать экземпляр. Вот полный исходник класса загрузки классов. Прошу критикуйте. Может вы и правы.
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
А я говорил в образном смысле
Это програмирование а не литература.
В любом случае это чушь просто потому чет в этом нет практиеского смысла.
Цитата:
Конечно ничего. Там же нету запрета еще раз создать экземпляр. Вот полный исходник класса загрузки классов. Прошу критикуйте. Может вы и правы.
Просто подумайте - какой ПРАКТИЧЕСКИЙ смысл в получении списка объектов классов или списка классов.
Человек пишущий код и так знает какие там объекты и классы иначе он говнокодер и никакие хитрые классы ему не помогут.
А их список во время выполения не дает абсолютно никакой полезной информации. Во всяком случае не больше чем дает любой профайлер или дебагер.
Покинул форум
Сообщений всего: 42
Дата рег-ции: Февр. 2012
Помог: 0 раз(а)
caballero пишет:
В любом случае это чушь просто потому чет в этом нет практиеского смысла.
caballero пишет:
Просто подумайте - какой ПРАКТИЧЕСКИЙ смысл в получении списка объектов классов или списка классов.
caballero пишет:
А их список во время выполения не дает абсолютно никакой полезной информации.
Смысл дает не список, а программист. Когда пишет вдруг новый класс, который умеет к примеру выводить версии всех классов, их авторов и т.д.. Классы в данном случае - это плагины или модулы. Их можно вкл и выкл. Может быть хоть так будет понятно.
caballero
Отправлено: 12 Сентября, 2012 - 17:55:47
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
Цитата:
Классы в данном случае - это плагины или модулы. Их можно вкл и выкл. Может быть хоть так будет понятно.
Шо значит включать выключать классы?
И что он вывалит на гора все классы которые на диске лежат?
если это плагины то должен быть список плагииов а не классов.
а если в плагине надо что еще кроме классов как ты это будешь включать
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.