| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Общие вопросы > Парадигма ООП в PHP. Как поживают инклюды? |
| Автор: p0zt3r 1.7.2009, 23:22 |
| Привет всем! Хотел задать три вопроса. 1. Какое расширение у include-файлов в ваших PHP-скриптах? 2. Как Вы считаете: имеет ли смысл безоговорочно и полностью переходить на кодинг в PHP в Java-стиле? Как Вы используете возможности callback и динамической типизации, если можно её так назвать, в PHP? 3. Какой бы хотели Вы видеть API "Самой удобной, гибкой и мощной CMS в мире"? Жду ответов и плодотворного обсуждения. Спасибо за внимание к моим вопросам! |
| Автор: youri 1.7.2009, 23:58 | ||
по назначению, когда нужен callback а какие у динамической типизации возможности? Она просто есть и почему ее нельзя так назвать?
имеется в виду какие есть недостатки/преимущества у существующих cms? |
| Автор: krundetz 2.7.2009, 00:15 | ||||
стандартное php и иногда tpl
Если тебе это удобно то да, при условие что не перегрузит систему черезмернм оьемом кода
сложный вопрос, в идеале хотелась бы, чтобы сказать мол модуль запустись и выдай представление вот в таком виде и все пожалуй |
| Автор: p0zt3r 2.7.2009, 01:06 | ||||
krundetz, спасибо!
а это не совсем правильно. С точки зрения администрирования.
Joomla написана в PHP-стиле? А Drupal с Wordpress'ом? |
| Автор: SamDark 2.7.2009, 01:23 | ||||||
p0zt3r,
php
Делать что-либо безоговорочно и полностью вообще нет смысла. callback использую… по назначению
Drupal7 пока вполне устраивает. |
| Автор: morfus 2.7.2009, 01:24 |
Давайте разделять, вы спрашиваете "как написать продукт в нужном стиле" или "как написать раскрученный продукт" ??? (если вы хотите второе то можете хоть в ASM стиле написать, всё равно на результат пиар компании это повлияет лишь косвенно) |
| Автор: MoLeX 2.7.2009, 05:59 |
| Автор: Sanchezzz 2.7.2009, 06:48 | ||||
лично я люблю чтобы я не задумовался о подключеии какихто инклудов для получения API класвов. достаточно сделать проверочную функцию которая будет выдавать мне проверку подключения и подключение нужного мне класса. Короч придумывай себе велосипед или использую фреймворки как посоветовал icewind
для этого можно почитать тему правила хорошего кода в разделе для профи. А ваше если ты пишешь продукт ты должен придерживатся одному стилю который должен создать ты сам. |
| Автор: icewind 2.7.2009, 11:54 |
А кто тебе сказал что нет? Или в пхп стиле значит быдлокодинг в перемешку с разметкой в линейку? Посмотри на структуру Zend Framework, а его делают создатели php. И это по твоему не в духе php? |
| Автор: youri 2.7.2009, 12:49 | ||
спорный совет. По-краней мере не для того, чтобы вынести оттуда единственно правильный стиль, а чтобы посмотреть, какие есть варианты. Да и излишне большая она |
| Автор: p0zt3r 2.7.2009, 14:59 | ||||
| MoLeX, потому что PHP-файлы имеют права executable. Но php-файлы с описанием классов или плугинов в Joomla, например, незапускные. Поэтому рационально и логически правильно использовать .inc для незапускных файлов, а .php для запускных файлов приложения, чтобы не вставлять в каждый файл, например, вот такой мусор:
morfus, кто будет пользоваться framework'ом, если он написан в дерьмовом стиле? Если бы не стиль у jQuery, им бы никто не пользовался, он бы не был так популярен. Это касается и любого языка программирования, любого приложения. icewind, архитектура MVC реализуется даже на фортране. Модель MVC это не единственный способ отделения данных от представления и со стилем программирования она не связана вовсе. Я говорю о стиле. Вот drupal и wordpress это чисто функциональный стиль. Но является ли это общепринятым, доступным, удобным для PHP-кодеров? Если я делаю расширяемое приложение, стоит ли придерживаться этого быдлокодинга? Удобен ли он вам? Есть C++, его стиль это классы/templates/операторы/интерфейсы + функциональное программирование C. Есть Java, в которой каждая сущность предметной области является иерархией объектов или объектом. Есть JavaScript, стиль которого это прототипное программирование, т.е. полностью динамический кодинг со всеми вытекающими. Серверные приложения пишутся не только на PHP, но и на Delphi - в нём тоже своя, точнее просто ООП, парадигма с VCL. Пишутся серверные приложения на Python'е. Синтаксически это перл-подобный функциональный язык - это его стиль. Есть стиль Ruby - динамическое объектно-ориентированное программирование с применением Rails-фреймворка, который делает крутые врапы БД, например. А какой стиль у PHP? Как вам удобнее? Дело в том, что мои PHP-приложения выглядят таким образом:
Здесь $K - синглтон CMS, через него доступен весь функционалл - подключение ядра, которое позволяет прикручивать модули и выводить контент с помощью своих шаблонов. Соответсвенно, это индексный файл для всего сайта, в который с помощью .htaccess'а перенаправляются все HTTP-запросы. Внутри происходит подгрузка ядра системы, подключаются и выполняются модули, обрабатывается ими же URI, выполняются соответствующие HTTP/MySQL-заросы, формируется из унифицированных объектов данных представление на основе макета. причем есть поддержка XSLT, а это значит, что эта система позволяет решать задачи создания не только сайтов, но и различных сервисов, которые предоставляют XML/JSON-данные. Цель моей работы - создать CMS для интеллектуализированных сервисов (семантический поиск, ранжирование и кластеризация данных), которая в дальнейшем будет решать задачи "семантической паутины" и поддерживать на данном этапе парадигму Веб 2.0. |
| Автор: p0zt3r 2.7.2009, 15:20 |
| Не вижу проблем в подгрузке нужных классов, когда есть __autoload. Не вижу никаких проблем в обработке системных ошибок с помощью своих эксепшенов. Я считаю, что главное в системе управления содержанием вебстраниц, это модульность, скорость, возможность создавать принципиально новые приложения на её базе, а также простота в интерфейсе разработчика (удобство API), в интерфейсе верстальщика (простота создания макетов), удобство в интерфейсе издателя/редактора, ну и системные фишки - бэкапинг, управление БД (с ним прекрасно справляется phpMyAdmin), и конечно, максимум функционала в части WWW-интерфейса. Т.е. полное управление www-директорией сервера, разделение прав пользователей и "политика безопасности", и отсутствие необходимости в SSH/FTP-доступе для обыденных задач. Добавлено через 3 минуты и 44 секунды youri, если есть что сказать о преимуществах/недостатках существующих CMS - то милости прошу! |
| Автор: icewind 2.7.2009, 15:31 | ||||||
с каких это пор? "запускные" - это что? Исполняемые? Тогда они как раз исполняемые. При выполнении инклюда их код исполняется и не важно что их пользователь не вызывал.
Кто тебе такое сказал?
иначе как ты сделаешь так, чтоб твои файлы не скачивали и смотрели через веб? .htacces? а если он запрещен? Если вообще сервер не apache? |
| Автор: ksnk 2.7.2009, 15:42 |
| icewind, |
| Автор: p0zt3r 2.7.2009, 15:42 | ||
icewind,
говорю же, инклюды делаешь .inc, а права на них прописываешь что-то вроде 750. Inc не должен запускаться и выполняться. В нём не может быть запускного кода по идее, если логически правильно кодить Добавлено через 2 минуты и 7 секунд ksnk, вот и я о том же. Для этого конечно, можно и мусор писать в каждом файле. А можно по-нормальному права прописывать и структурировать директории. |
| Автор: icewind 2.7.2009, 16:09 | ||||
он увидит надпись Restricted access. потому что
А если на все файлы права выставлять по 600 то пофиг какое у него расширение. К чему тогда этот вопрос? |
| Автор: p0zt3r 2.7.2009, 16:24 | ||||
| В тему топика. В одной хорошей книжке по PHP 5 есть бестолковый пример:
Конечно, в соответствии с парадигмой ООП, эта задача должна быть разрешена так:
Но есть одно НО. В компилируемых языках программирования, интерфейсы появились для того, чтобы сторонний программист мог не зная реализации пользовался классом, скомпилированным другим разработчиком. В сущности, интерфейс (в том числе и COM/ActiveX) это всего лишь таблица функций и свойств, которая аналогична таблице функций в DLL и SO-файлах и представляет собой метаданные какой-либо модели предметной области. Прежде всего, нужно обратить внимание, что это особенность компилируемых языков, в которых нужно сделать классу условно говроря "фасад" для стороннего разработчика. В PHP же, неважно как наследуется класс и по сути само наследование, его роль в PHP, размыта, поэтому два приведенных кода вверху семантически равнозначны. Т.е. наличие у класса того или иного метода определяется интерпретатором динамически. Такая же особенность есть и в JS. А вот в AS, например, при генерации компилированного SWF, интерпретатор(компилятор?) анализирует ООП-модель на наличие в ней реализаций методов. Ну и как здесь быть? Если у класса был описан метод draw() и программист к нему обратился, ему не важен абстрактный класс IDrawableShape. И что по этому поводу может сказать PHP Manual? Да ничего! Делай, как хочешь. Так где же, собственно, стиль PHP? Добавлено через 3 минуты и 39 секунд icewind, ещё нюанс, в Apache есть AddType application/x-httpd-php .php Для .inc файлов этого можно не указать (как и делается по умолчанию), в результате чего, inc файлы перестают быть интерпретированными из прямого HTTP-запроса. И права доступа тут не при чём. |
| Автор: SamDark 2.7.2009, 16:28 | ||||
| icewind, ksnk, p0zt3r, А кто вообще сказал, что в доступной извне директории должно лежать что-либо кроме статики и index.php? p0zt3r,
Не функциональный, а процедурный. Процедурный стиль != быдлокодинг. Быдлокодинг — это нечто не из этой оперы вообще.
Может ограничиться хорошим набором классов для начала? Что такое «парадигма Веб 2.0»? |
| Автор: p0zt3r 2.7.2009, 16:36 |
| SamDark, в доступной извне директории у меня лежит index.php, код которого я привёл выше. Не процедурный, а структурный, если уж на то пошло. А что такое быдлокодинг? http://slovari.yandex.ru/dict/economic/article/ses2/ses-4482.htm?text=%D0%BF%D0%B0%D1%80%D0%B0%D0%B4%D0%B8%D0%B3%D0%BC%D0%B0&stpar1=1.1.2 http://ru.wikipedia.org/wiki/Web_2.0 http://ru.wikipedia.org/wiki/Семантическая_паутина Добавлено @ 16:37 А что такое "хороший набор классов"? Хороший набор классов появляется на стадии проектирования Добавлено @ 16:38 да! и ещё клиентский фреймворк кодить надо. это вообще ацкий геморой будет. Добавлено @ 16:40 Да. И какая вообще статика? Покажите мне хоть один вебдванольный сайт, в котором есть хоть одна статическая страница! Статики вообще не должно быть, т.к. она подмножество динамического контента, выражаясь философски Добавлено @ 16:44 Моё видение Веб 2.0:
|
| Автор: SamDark 2.7.2009, 17:24 | ||||||
| p0zt3r, Так зачем был вопрос про расширения, если по-хорошему наружу и так ничего не торчит?
Бездумное написание кода «лишь бы работало». Очень и очень отличается от грамотного кода в любом стиле. Как правило такой код не может быть использовать повторно или дописан достаточно быстро.
Статика = CSS, JS, картинки, файлы.
Вот это уже хорошо. Советую не употреблять слова «Веб 2.0». Пошло звучит ;) |
| Автор: ksnk 2.7.2009, 17:32 |
| Я вообще-то хотел сказать, что если в файле Auth.php описан только класс, и никакого вызова его нет (как, я надеюсь, и принято писать), то умный хакер все равно ничего не увидит, есть там die('restricted access') или просто ничего нет. |
| Автор: p0zt3r 2.7.2009, 17:43 |
| SamDark, ну и CSS и картинки это не статика нифига. Скажем есть у тебя две версии сайта - одна в разработке, другая рабочая. Или версия сайта для слепых и версия сайта для тупых - можно конечно на клиент выгружать все эти варианты CSS и картинок и прочего "статического" контента, а можно выдавать скриптом. Производительность здесь не теряется, браузеры всё равно кэшируют эти страницы, появляется возможность учёта траффика сервера на уровне скрипта. Но всё это, я согласен, неубедительно. С JS таже тема. Создал ты новую версию фреймворка и чё теперь? заменять файлы на сервере? Ну если ты об этом. А ты работал когда-нибудь в крупной фирме, где кретин-менеджер, кретин-заказчик и кретин-проектировщик? И все тебя имеют за сроки? SamDark, Веб 2.0 звучит вполне приемлимо. И моё видение это видение не моё. ksnk, так или иначе обращение к Auth.php должно вызывать 403, а не пиз--ж CMS о restricted access. Есть стандарты, есть правила, так надо каким-то уродцам делать исключения вечно. А если я хочу, чтобы у меня картинка красивая показывалась при открытии напрямую "секретных" файлов? Мне чё, надо во всем этом joomla-кале исправлять указанную строку? Это уже и называется быдлокодинг - лишьбыкак! |
| Автор: youri 2.7.2009, 18:02 | ||||||||
не надо делать таких громких заявлений, если у тебя все генерируется динамически, это не значит, что у всех должно быть так проверял?
почему нет? +1
кому должно? Сначала подумай, как туда браузер попасть может
Есть такая штука как "здравый смысл", так надо каким-то уродцам с ортодоксальными взглядами проповедовать свою единственно правильную точку зрения
нельзя создать систему, рассчитанную на любое изменение |
| Автор: p0zt3r 2.7.2009, 18:57 |
зачем тогда вообще создавать системы? чтобы плодить новых традиционалистов, только которые вообще не придерживаются никаких стандартов - не прошлых, не вымышленных? неправильно набранный вручную пермалинк Если бы всё держалось на "здравом смысле", Интернета вообще бы не было. Был бы только HTML 2.0 и сайт http://www.1-9-9-4.ru Вывод по топику У PHP нет своего стиля. Это всего лишь один язык из семейства Perl-подобных серверных языков. Исторически, PHP пришёл взамен Perl'а только из-за того, что содержал удобный фреймворк для работы с HTTP-аттрибутами, сессиями, сокетами, sendmail и др. и для рядового кодера представлял собой адаптацию Perl'а к задачам WWW. Переход к PHP многих разработчиков вернул в языки со строгим синтаксисом, в тоже время создав возможности для быстрой разработки веб-сайтов. Стиль быдлокодинга насаждается создателями самого PHP, как мы можем убедится из их официального сайта http://www.php.net/source.php?url=/docs.php. На данный момент PHP 5 Manual разъясняет только технические аспекты языка программирования PHP, предоставляя программисту самому создать свой стиль программирования на нём. Я считаю, что в эпоху RAD, создание приложений должно производится с помощью CASE-технологий, следовательно правильный и адекватный стиль программирования на PHP это использование всех доступных возможностей ООП-парадигмы, которая, к сожалению, не полностью реализуема на этом языке. Этот стиль подразумевает взвешенное использование динамических возможностей языка, в том числе и лямбда-функций, с оглядкой на безопасность. Кроме того, создание и поддержка сайта включает в себя не только разработку серверных сценариев, в общем случае которые представляют собой сценарии обработки HTTP и SQL запросов, но и правильную конфигурации WWW-сервера (IIS, Apache). К сожалению, PHP на Apache реализуется в виде mod'а. API Apache'а очень просто и не позволяет на уровне серверного сценария управлять дочерними процессами сервера, что обусловлено опять же не только архитектурой Apache (которая, в общем-то, сполна выполняет свои обязанности), но и требованиями безопасностями. Мне нравится PHP из-за синтаксиса, простоты в использовании, скорости работы и времени разработки. Существуют готовые решения, куча документации. Вцелом, PHP это круто! |
| Автор: SamDark 2.7.2009, 19:27 | ||||||||||||||||||
Предпочитаю таких мест избегать.
Да.
Я проверял. Отдача через php не быстра.
Стандарты и изменения как-бы два разных совсем понятия…
А какого чёрта что-то кроме index.php и картинок/CSS/JS доступно извне?
Не там смотрим: http://framework.zend.com/
Я что-то пропустил?
А также CGI… и вообще, кто заставляет Apache использовать?
Хотите сказать, что процесс запустить из PHP нельзя? |
| Автор: youri 2.7.2009, 20:40 | ||||||||||||||||
система, рассчитанная на любое изменение - идеал, для ее создания нужно бесконечное количество времени. Выдача картинки для "секретных" файлов - хз зачем нужно при некоторых архитектурах может и так. Но если пользователь вручную набирает URL, то он не испугается надписи Restricted access
обоснуй это и плюс и минус. Главное чтобы стиль был, а какой - не так важно
Lerdorf initially created these Personal Home Page Tools to replace a small set of Perl scripts he had been using to maintain his personal homepage php был ориентирован на создание сайтов Переход к PHP многих разработчиков вернул в языки со строгим простым синтаксисом
затрудняюсь с комментариями. Возможно для их сайта такой стиль приемлем. Но я бы не рискнул назвать это быдлокодингом
каких CASE-технологий не хватает php?
вам шашечки или ехать нужно?
так что ли? http://www.phppatterns.com/docs/design/hello_world_in_patterns http://php.net/manual/en/functions.anonymous.php, кстати, появились в php-5.3.0
чего тебе не хватает? |
| Автор: Sentox 2.7.2009, 22:19 | ||||||||
Вот уж странно, во первых абстрактный класс не имплементируется, а во вторых интерфейсы и то что красным выделено относится и к PHP. Судя по всему Вы даже не описали интерфейса для абстрактного класса, почему и спутали интерфейсы с абстрактными классами.
Ещё страннее что PHP то же самое делает особенно когда описан интерфейс для классов. |
| Автор: p0zt3r 2.7.2009, 22:35 | ||
а что он делает?
упс Что-то я реально нагнал тут воды какой-то. Прочитал топик http://forum.vingrad.ru/forum/topic-71335.html и всё проросло само собой. Просто не надо было путать тёплое с мягким. И всё же зачем нужен интерфейс в PHP? в указанном топике, один из авторов говорит, что для удобства программирования. я тоже так считаю, и об этом указал в своём посте про интерфейсы в компилируемых языках. |
| Автор: Sentox 2.7.2009, 22:42 | ||||
| Да я сам нередко поднимал эти вопросы по началу, насчёт интерфейсов. Честно говоря многие мало понимают мощности интерфейсов. Вы правильно говорили
Особенно обеспечить парадигму ООП.Например как в С++ надо обязательно типизировать передаваемые аргументы так и здесь:
Это обеспечит правильность функционирования допустим метода. |
| Автор: icewind 3.7.2009, 00:37 | ||
Использованием интерфейсов обеспечивается возможность множественного наследования, а не только для удобства ( хотя не без этого ). Абстрактный класс здесь не при чем.
Быдлокодинга как самостоятельного понятия нет. Есть быдлокодеры, которые могут выдавать шедевры на ЛЮБОМ языке. Каждая возможность создана для конкретной задачи... Классы и интерфейсы это часть php и использование всех применимых парадигм ооп тоже. |
| Автор: p0zt3r 3.7.2009, 00:38 | ||
Вот такую --ету по-вашему возможно использовать для всего-навсего врапера БД? Ну на phpDoc не обращайте внимания )
|
| Автор: MoLeX 3.7.2009, 06:09 | ||||||||
глупо и не нужно.
если ему удалось завладеть паролями, то в этом случае виноват только разработчик Сам при создание сайтов использую такой подход .htaccess
и все, можно этим и ограничиться. А если ты законченный параноик то в каждый файл
но все это лишние - все модули выносим из www (html_public и т.д.), оставляем тока необходимый минимум |
| Автор: solenko 3.7.2009, 08:16 | ||
Это ж каким образом? Или я отстал от жизни и интерфейсы уже могут содержать реализацию? |
| Автор: icewind 3.7.2009, 10:15 | ||
Нет, все правильно. Интерфейсы содержать реализацию не могут. Я имел ввиду наследование от нескольких интерфейсов. Фактически мы можем наследовать класс от множества абстрактных сущностей. |
| Автор: Sentox 3.7.2009, 12:16 | ||||||
Implements - это реализация, Extends - расширение (наследование) В переводе вроде так.
А вот это уже вкорне не правильно. |
| Автор: cia 15.4.2011, 17:54 | ||
а как можно увидеть или скачать Php-файл через браузер? |
| Автор: Muerto 15.4.2011, 17:58 |
| cia, Почитайте о том что такое php в гугле, ответ - никак. При условии что сервер функционирует верно... Что бы украсть чужой php код нужно так или иначе взламывать сайт/сервер |
| Автор: cia 15.4.2011, 18:13 | ||||||||||
А что такое "include-файлы"? И чем они отличаются от php-файлов?
Нет, не имеет - однозначно. На Php нужно программировать в стиле Php, на c++ - в стиле с++, на java - в стиле java. И вообще, что понимать под "стилем java"?
Так, как регламентирует документация ))
А как её можно использовать или не использовать? Она тупо есть. Вопрос на засыпку: как можно использовать тот факт, что float - это число с дробной частью?
Самая гибкая цмс - это фреймворк. Самая удобная... смотря для кого: для пользователя или программиста. Я лично хотел бы видеть минимальный объём апи вообще, но с возможностью при необходимости легко и быстро подключить требуемые мне модули, реализующие тот или иной функционал (разумеется, должна быть чёткая и ясная документация по всем модулям). При этом такое подключение должно вызывать минимальные накладные расходы и как можно ближе сводиться к простому include_once. Если собрались делать супер-мощную цмс, то какие-то странные вопросы А вообще (имхо) лучше почитать документцию по PHP - сразу станут очевидны все особенности этого языка и отличия от Java. |
| Автор: ksnk 15.4.2011, 18:15 |
| сообщения в этом топике имеют 2-х годичную выдержку... |
| Автор: cia 15.4.2011, 18:33 | ||
И я о том же. Ага. Только я это заметил уже после того, как написал сообщение |
| Автор: Muerto 15.4.2011, 19:25 |
| cia,под стилем Java/C++ имеется ввиду синтаксис языка... |
| Автор: Sanchezzz 16.4.2011, 02:28 |
| боже опять эта тема всплыла +)) ждем еще год пока кто то суда запостит пост) |