Вопросы по основам PHP |
Здравствуйте, гость ( Вход | Регистрация )
Вопросы по основам PHP |
Litkevich Yuriy |
26.12.2012, 17:40
Сообщение
#1
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Есть строка в коде:
1) что такое $this в PHP? 2) что такое model_setting_setting? --- предположения: 1) указатель/ссылка на объект (экземпляр класса) ControllerModuleCategory; 2) член (поле) класса ControllerModuleCategory, однако я не вижу чтоб его где-то объявили, в базовом тоже не вижу. как это всё работает? |
|
|
Iron Bug |
26.12.2012, 18:09
Сообщение
#2
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
у тебя какая-то извращённая фантазия тут всё точно как в С++ написано: объявлен класс ControllerModuleCategory, который наследует от класса Controller. в нём private поле с неким списком error и метод index, который обращается к самому объекту через this.
всё проще пареной репы. но это в 5-м PHP. в более ранних там с классами особые заморочки и надо очень внимательно про них читать. я не уверена, что в 5-м они достигли полного аналога сишных классов. просто я не особо следила за развитием PHP последние годы. |
|
|
Litkevich Yuriy |
26.12.2012, 18:37
Сообщение
#3
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
|
|
|
Iron Bug |
26.12.2012, 20:06
Сообщение
#4
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
не могу врубится вообще как этот PHP и openCart, на его основе, работает. У меня глюк странный в магазине, а как выловить даже не знаю. очевидно, что model_setting_setting - член базового класса. но в PHP полно глобальных переменных и прочего всего, так что лучше не зная туда не лезть. тем более, если это Карт. потому что самая большая проблема PHP - это безопасность и я тебе не рекомендую тыкать настройки на сервере без особой необходимости, а то наделаешь себе проблем а в чём заключается глюк в магазине? может, что подскажу. я много работала с PHP одно время. |
|
|
Litkevich Yuriy |
26.12.2012, 20:53
Сообщение
#5
|
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
член базового класса ни в классе ControllerModuleCategory ни в базовом Controller
ControllerModuleCategory
а в чём заключается глюк в магазине? В админке есть настройки размещения "модулей" на витрине (где какой блок находится), для модуля "категория" выглядит так:это единственный модуль, который глючит. 1) я могу поменять здесь что угодно, хоть все строчки (страницы магазина) удалить. Но ничего не сохраняется. В других модулях всё нормально сохраняется, проверял, в БД данные не обновляются. Мало того, Рсположение "Правая колонка" я поменял вчера (экспериментируя с компоновкой) до этого было "Левая колонка". 2) Удаляю соответствующие записи в БД руками - захожу в настройки модуля, там опять эти же три строки, лезу сразу в БД - пусто! Откуда он настройки эти берёт, зараза? ОФФ: |
|
|
||
Iron Bug |
26.12.2012, 21:27
Сообщение
#6
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
я нашла код этого OpenCart в сети. это динамически создаваемый член класса (я же говорю, что это не классы нифига, а, скорее, массивы. раньше они и были массивами, по типу javascript, а потом их стали делать более похожими на классы).
в общем, это динамический элемент, грузится он в функции
в файле system/engine/loader.php. конкретно тут он грузит какие-то файлы настроек из каталога model/$model.php, а уж что там в вызове за $model - это надо смотреть на месте. в случае model_setting_setting это, скорее всего, файл model/setting/setting.php. там вызов editSetting - запрос к базе. |
|
|
Litkevich Yuriy |
27.12.2012, 8:08
Сообщение
#7
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
это динамически создаваемый член класса Спасибо огромное! Может ты мне сможешь объяснить, как такие вещи разыскивать? Какова последовательность рассуждений у тебя была, чтобы найти model_setting_setting.и ещё не понятно, как само имя (model_setting_setting) получается, за это отвечает строка: Цитата 'model_' . str_replace('/', '_', $model) да? |
|
|
Iron Bug |
27.12.2012, 13:59
Сообщение
#8
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
да? именно. и получается она из пути до имени файла. я внизу дописала, что это файл model/setting/setting.php. а в нём определён этот самый editSetting Может ты мне сможешь объяснить, как такие вещи разыскивать? с этим сложнее. начинаешь смотреть с класса, с загрузки этого конкретного скрипта. проблема в том, что в PHP могут include'иться любые файлы и они становятся частью кода. а классы на самом деле не совсем классы, они могут расширяться "на ходу". по сути, это именованные массивы. поэтому надо проверять всю цепочку загрузки до конкретного класса, чтобы понять, что туда попадает, в итоге. я сначала смотрела исходный класс, потом Control, потом - Model. собственно, я вряд ли смогу формально изложить ход своих мыслей при исследовании этого вопроса. просто я поняла, как эта машина работает и тогда сразу нашла, где примерно собираются эти пути. тут чисто опыт программирования на PHP, наверное. |
|
|
Litkevich Yuriy |
28.12.2012, 3:26
Сообщение
#9
|
разработчик РЭА Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: 94 |
Iron Bug, может ты мне ещё подскажешь, как в вебе можно отлаживатся без каких либо IDE (я использовал echo, но он суёт текст перед веб страницей из-за этого браузер кодировку определить не может - не удобно)? Есть ли какая-нибудь бесплатная IDE, в которой можно было точки останова ставить в php-коде?
|
|
|
Iron Bug |
28.12.2012, 15:39
Сообщение
#10
|
Профессионал Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: 12 |
Есть ли какая-нибудь бесплатная IDE, в которой можно было точки останова ставить в php-коде? не знаю. бесплатных, кажется, нет. все воруют Zend. а я вообще отлаживаюсь с помощью вывода всяких тестовых сообщений или записей в базу. как-то отладчики PHP меня не привлекают, тем более, что многие темплейт-энджины имеют свои средства отладки. ну и логи апача и мускуля ещё - тоже неплохой метод поиска багов. Сообщение отредактировал Iron Bug - 28.12.2012, 15:40 |
|
|
Текстовая версия | Сейчас: 26.12.2024, 5:19 |