Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Классы и переменные в переменных |
Автор: Deja_Vu 9.7.2007, 01:18 | ||||
Очень удобно.... Хотелось бы в классе использовать этот механизм. Такое возможно ... и если да, то как?! ниже мой пример ... классом.
|
Автор: sTa1kEr 9.7.2007, 01:52 | ||||||
Если я вас правильно понял, то в 49ой строке вам нужно написать
Т.е. значение переменной в фигурных скобках является переменным именем поля. Для примера, можно написать так
И это будет полностью эквивалентно
Добавлено через 5 минут и 9 секунд В вашем примере PHP будет интерпретировать 49-ую строку, как имя поля локальной переменной $currentTag. Но у вас не опредлена локальная переменная $currentTag и поэтому PHP скажет, что ткого поля не сществует. |
Автор: Deja_Vu 9.7.2007, 01:59 |
Спасибо - это оно. |
Автор: WIPS 9.7.2007, 11:16 | ||
sTa1kEr, спасибо за:
Мне как раз надо было сделать кое-что похожее. |
Автор: Deja_Vu 9.7.2007, 15:02 | ||||||
Появилась очередая проблемка с этим куском -(( У меня дома этот код работает.
и проверка выводит результаты:
На сервере же ... после цикличного обхода 1 куска ... проверка показывает пустой результат... Вот: http://aanda.fatal.ru/sserver.php В проверочном куске выводятся те параметры которые были найдены в файле и помещены в $this->currentTag, который используется затем как параметр - а вот потом, как я понимаю
не срабатывает. Как с этим справится?! Не хочу использоваться switch. |
Автор: sTa1kEr 9.7.2007, 17:36 | ||
Deja_Vu, на сервере PHP 4? Давно пора уже переходить на PHP 5 ![]()
По идеи только так, хотя проверить не могу - нету PHP 4. |
Автор: Deja_Vu 9.7.2007, 23:35 | ||||
хз какой PHP ... не мой же сервак. Но так тоже не прошло. ну да ладно ... это тестовый сервак. Хотя счас через 4 php дома прогоню |
Автор: Deja_Vu 10.7.2007, 20:13 |
del |
Автор: sTa1kEr 10.7.2007, 20:34 | ||
Могу еще предложить такой вариант:
Хотя тогда уж проще просто в массиве данные хранить... |
Автор: Deja_Vu 10.7.2007, 21:39 | ||||
Проблема!!! Оказывается PHP 4
верно интерпретирует. Проблема в другом. После изменения атрибутов класса внутри парсящих XML функций, все аттрибуты класса на выходе из них оказываются не изменны!!!
Результат: http://aanda.fatal.ru/sserver.php Что делать?! Необходимо, что бы этот скрипт заработал на PHP 4 версии, но отказываться от классов нельзя -(( |
Автор: sTa1kEr 10.7.2007, 23:57 | ||||||||
Сразу подумал, что все проблеммы из-за того, что в PHP 4 объекты по умолчанию передаются по значению, а не по ссылке, но решил проверить. Очень неординарно ведет себя PHP 4. Проблемы оказалась в самом неожиданном месте, в строчках 47 и 48:
Хотя, по идеи, конструкции типа Array(&$this, "startTagEdit") правильные и $this в массив устанавливается по ссылке, но! в xml_set то-ли по дороге ссылка в массиве теряется, то-ли ссылки в xml_set_object и других xml_set разные оказываются... Однако если поместить эти строчки перед самим xml_parse(), то, как ни странно, все работает. Но наиболее правильный вариант - это передавать стоки вместо массивов. Т.е. вместо строчек 47 и 48:
Видимо в этом случае он сам определяет, что это методы нужного класса и сам правильно сохраняет нужные ссылки. Добавлено @ 00:09 Да, совем забыл. Еще один момент. Т.к. xml_parser() парсит теги построчно (как не странно, то что вы вызываете его для каждогой строки отдельно - тут непричем), то для одного тега он может вызывать метод dataEdit() несколько раз. Eсли к примеру теги будут вида:
То он сначала запишет в поле MODNAME "My Moduel", а затем перезапишет его переносом строки. По этому, желательно проверять, что он второй раз пишет в один тег. К примеру, добавить в начало метода:
|
Автор: Deja_Vu 11.7.2007, 00:18 | ||
хм ... да уж.. неожиданна развязка - пасибо.
Просто втоой раз эта функция вызывается вне - после закрывающего тега. |
Автор: sTa1kEr 11.7.2007, 00:24 | ||
У меня перезаписал ![]() |