Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Парадигма ООП в PHP. Как поживают инклюды?


Автор: p0zt3r 1.7.2009, 23:22
Привет всем!

Хотел задать три вопроса.

1. Какое расширение у include-файлов в ваших PHP-скриптах?
2. Как Вы считаете: имеет ли смысл безоговорочно и полностью переходить на кодинг в PHP в Java-стиле? Как Вы используете возможности callback и динамической типизации, если можно её так назвать, в PHP?
3. Какой бы хотели Вы видеть API "Самой удобной, гибкой и мощной CMS в мире"?

Жду ответов и плодотворного обсуждения.

Спасибо за внимание к моим вопросам!  smile 

Автор: icewind 1.7.2009, 23:39
Цитата(p0zt3r @  1.7.2009,  23:22 Найти цитируемый пост)
1. Какое расширение у include-файлов в ваших PHP-скриптах?

 smile 

Цитата(p0zt3r @  1.7.2009,  23:22 Найти цитируемый пост)
Как Вы считаете: имеет ли смысл безоговорочно и полностью переходить на кодинг в PHP в Java-стиле? Как Вы используете возможности callback и динамической типизации, если можно её так назвать, в PHP?

На PHP следует кодить в стиле PHP при этом используя по мере необходимости и в соответствии с поставленной задачей наиболее рациональные методы. Все возможности и архитектуру приложения описывать на этапе проектирования. Если этап проектирования прошел мимо, то без разницы на чем писать. Все равно получится куча кода, которую тяжко расширять.


Цитата(p0zt3r @  1.7.2009,  23:22 Найти цитируемый пост)
Какой бы хотели Вы видеть API "Самой удобной, гибкой и мощной CMS в мире"?

В смысле по цвету?  smile 
А вообще Zend, CodeIgniter/Kohana и Joomla всем устраивают  smile 

Автор: youri 1.7.2009, 23:58
Цитата(icewind @  1.7.2009,  23:39 Найти цитируемый пост)
Как Вы используете возможности callback

по назначению, когда нужен callback

Цитата(p0zt3r @  1.7.2009,  23:22 Найти цитируемый пост)
и динамической типизации, если можно её так назвать, в PHP?

а какие у динамической типизации возможности? Она просто есть
и почему ее нельзя так назвать?

Цитата(p0zt3r @  1.7.2009,  23:22 Найти цитируемый пост)
3. Какой бы хотели Вы видеть API "Самой удобной, гибкой и мощной CMS в мире"?

имеется в виду какие есть недостатки/преимущества у существующих cms?

Автор: krundetz 2.7.2009, 00:15
Цитата(p0zt3r @  1.7.2009,  23:22 Найти цитируемый пост)
1. Какое расширение у include-файлов в ваших PHP-скриптах?

стандартное php и иногда tpl
Цитата(p0zt3r @  1.7.2009,  23:22 Найти цитируемый пост)
2. Как Вы считаете: имеет ли смысл безоговорочно и полностью переходить на кодинг в PHP в Java-стиле?

Если тебе это удобно то да, при условие что не перегрузит систему черезмернм оьемом кода
Цитата(p0zt3r @  1.7.2009,  23:22 Найти цитируемый пост)
3. Какой бы хотели Вы видеть API "Самой удобной, гибкой и мощной CMS в мире"?

сложный вопрос, в идеале хотелась бы, чтобы сказать мол модуль запустись и выдай представление вот в таком виде и все пожалуй

Автор: p0zt3r 2.7.2009, 01:06
krundetz, спасибо! 

Цитата

стандартное php и иногда tpl

а это не совсем правильно. С точки зрения администрирования.

Цитата
 На PHP следует кодить в стиле PHP 

Joomla написана в PHP-стиле? А Drupal с Wordpress'ом?


Автор: SamDark 2.7.2009, 01:23
p0zt3r, 
Цитата
1. Какое расширение у include-файлов в ваших PHP-скриптах?

php

Цитата
2. Как Вы считаете: имеет ли смысл безоговорочно и полностью переходить на кодинг в PHP в Java-стиле? Как Вы используете возможности callback и динамической типизации, если можно её так назвать, в PHP?

Делать что-либо безоговорочно и полностью вообще нет смысла.
callback использую… по назначению smile Типизацию — также по назначению.

Цитата
3. Какой бы хотели Вы видеть API "Самой удобной, гибкой и мощной CMS в мире"?

Drupal7 пока вполне устраивает.

Автор: morfus 2.7.2009, 01:24
Цитата(p0zt3r @  2.7.2009,  01:06 Найти цитируемый пост)
Joomla написана в PHP-стиле? А Drupal с Wordpress'ом?

Давайте разделять, вы спрашиваете "как написать продукт в нужном стиле" или "как написать раскрученный продукт" ???
(если вы хотите второе то можете хоть в ASM стиле написать, всё равно на результат пиар компании это повлияет лишь косвенно)

Автор: MoLeX 2.7.2009, 05:59
Цитата(p0zt3r @  2.7.2009,  01:06 Найти цитируемый пост)

а это не совсем правильно. С точки зрения администрирования.

smile  почему не правильно? 

Автор: Sanchezzz 2.7.2009, 06:48
Цитата

3. Какой бы хотели Вы видеть API "Самой удобной, гибкой и мощной CMS в мире"?

лично я люблю чтобы я не задумовался о подключеии какихто инклудов для получения API класвов.
достаточно сделать проверочную функцию которая будет выдавать мне проверку подключения и подключение нужного мне класса.
Короч придумывай себе велосипед или использую фреймворки как посоветовал icewind
Цитата

"как написать продукт в нужном стиле"

для этого можно почитать тему правила хорошего кода в разделе для профи.
А ваше если ты пишешь продукт ты должен придерживатся одному стилю который должен создать ты сам.


Автор: icewind 2.7.2009, 11:54
Цитата(p0zt3r @  2.7.2009,  01:06 Найти цитируемый пост)
Joomla написана в PHP-стиле? А Drupal с Wordpress'ом?

А кто тебе сказал что нет? Или в пхп стиле значит быдлокодинг в перемешку с разметкой в линейку?  smile Или архитектура MVC не в php стиле?
Посмотри на структуру Zend Framework, а его делают создатели php. И это по твоему не в духе php?

Автор: youri 2.7.2009, 12:49
Цитата

для этого можно почитать тему правила хорошего кода в разделе для профи

спорный совет. По-краней мере не для того, чтобы вынести оттуда единственно правильный стиль, а чтобы посмотреть, какие есть варианты. Да и излишне большая она

Автор: p0zt3r 2.7.2009, 14:59
MoLeX, потому что PHP-файлы имеют права executable. Но php-файлы с описанием классов или плугинов в Joomla, например, незапускные. 
Поэтому рационально и логически правильно использовать .inc для незапускных файлов, а .php для запускных файлов приложения, чтобы не вставлять в каждый файл, например, вот такой мусор:
Код

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );



morfus, кто будет пользоваться framework'ом, если он написан в дерьмовом стиле? Если бы не стиль у jQuery, им бы никто не пользовался, он бы не был так популярен. Это касается и любого языка программирования, любого приложения.


icewind, архитектура MVC реализуется даже на фортране. Модель MVC это не единственный способ отделения данных от представления и со стилем программирования она не связана вовсе.

Я говорю о стиле. Вот drupal и wordpress это чисто функциональный стиль. Но является ли это общепринятым, доступным, удобным для PHP-кодеров? Если я делаю расширяемое приложение,
стоит ли придерживаться этого быдлокодинга? Удобен ли он вам?

Есть C++, его стиль это классы/templates/операторы/интерфейсы + функциональное программирование C. 
Есть Java, в которой каждая сущность предметной области является иерархией объектов или объектом.
Есть JavaScript, стиль которого это прототипное программирование, т.е. полностью динамический кодинг со всеми вытекающими.
Серверные приложения пишутся не только на PHP, но и на Delphi - в нём тоже своя, точнее просто ООП, парадигма с VCL.
Пишутся серверные приложения на Python'е. Синтаксически это перл-подобный функциональный язык - это его стиль.
Есть стиль Ruby - динамическое объектно-ориентированное программирование с применением Rails-фреймворка, который делает крутые врапы БД, например.

А какой стиль у PHP? Как вам удобнее?

Дело  в том, что мои PHP-приложения выглядят таким образом:

Код

include ('/mf/main.inc');
$K->init();
$K->doJobs ();
$K->shut ();


Здесь $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
Цитата(p0zt3r @  2.7.2009,  14:59 Найти цитируемый пост)
потому что PHP-файлы имеют права executable. Но php-файлы с описанием классов или плугинов в Joomla, например, незапускные. 


с каких это пор? "запускные" - это что? Исполняемые? Тогда они как раз исполняемые. При выполнении инклюда их код исполняется и не важно что их пользователь не вызывал.

Цитата(p0zt3r @  2.7.2009,  14:59 Найти цитируемый пост)
Поэтому рационально и логически правильно использовать .inc для незапускных файлов, а .php для запускных файлов приложения, чтобы не вставлять в каждый файл, например, вот такой мусор:

Кто тебе такое сказал?  smile  Формат файлов ТОЛЬКО php с первыми строчками типа
Код

defined( '_JEXEC' ) or die( 'Restricted access' );

иначе как ты сделаешь так, чтоб твои файлы не скачивали и смотрели через веб? .htacces? а если он запрещен? Если вообще сервер не apache?

Автор: ksnk 2.7.2009, 15:42
icewind,  smile  А что будет, если я, к примеру, описал класс Auth с секретными паролями в файле Auth.php и злой хакер открыл его в своем броузере по адресу http://site.ru/plugins/auth.php?

Автор: p0zt3r 2.7.2009, 15:42
icewind, 
Цитата

иначе как ты сделаешь так, чтоб твои файлы не скачивали и смотрели через веб? .htacces? а если он запрещен? Если вообще сервер не apache?


говорю же, инклюды делаешь .inc, а права на них прописываешь что-то вроде 750.

Inc не должен запускаться и выполняться. В нём не может быть запускного кода по идее, если логически правильно кодить

Добавлено через 2 минуты и 7 секунд
ksnk, вот и я о том же. Для этого конечно, можно и мусор писать в каждом файле. А можно по-нормальному права прописывать и структурировать директории.

Автор: icewind 2.7.2009, 16:09
Цитата(ksnk @  2.7.2009,  15:42 Найти цитируемый пост)
icewind,  smile  А что будет, если я, к примеру, описал класс Auth с секретными паролями в файле Auth.php и злой хакер открыл его в своем броузере по адресу http://site.ru/plugins/auth.php? 

он увидит надпись Restricted access. потому что
Код
    
defined( '_JEXEC' ) or die( 'Restricted access' );


А если на все файлы права выставлять по 600 то пофиг какое у него расширение. К чему тогда этот вопрос?

Автор: p0zt3r 2.7.2009, 16:24
В тему топика.

В одной хорошей книжке по PHP 5 есть бестолковый пример:

Код

class Circle
{
  function draw () { echo "круг";}
}

class Square
{
 function draw () { echo "квадрат";
}

function ShapeFactoryMethod ($shape)
{
switch ($shape)
{
case "Circle": return new Circle ();
case "Square":  return new Square ();
}
}

ShapeFactoryMethod ("Circle")->draw ();
ShapeFactoryMethod ("Square")->draw ();


Конечно, в соответствии с парадигмой ООП, эта задача должна быть разрешена так:
Код

abstract class IDrawableShape
{
abstract public function draw ();
}

class Circle implements IDrawableShape {...}
class Square implements IDrawableShape {...}
...
class SomeNewUserShape implements IDrawableShape {...}


Но есть одно НО.  В компилируемых языках программирования, интерфейсы появились для того, чтобы сторонний программист мог не зная реализации пользовался классом, скомпилированным другим разработчиком. В сущности, интерфейс (в том числе и 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, 
Цитата

Я говорю о стиле. Вот drupal и wordpress это чисто функциональный стиль. Но является ли это общепринятым, доступным, удобным для PHP-кодеров? Если я делаю расширяемое приложение,
стоит ли придерживаться этого быдлокодинга? Удобен ли он вам?

Не функциональный, а процедурный. Процедурный стиль != быдлокодинг. Быдлокодинг — это нечто не из этой оперы вообще.

Цитата

Цель моей работы - создать CMS для интеллектуализированных сервисов (семантический поиск, ранжирование и кластеризация данных), которая в дальнейшем будет решать задачи "семантической паутины" и поддерживать на данном этапе парадигму Веб 2.0.

Может ограничиться хорошим набором классов для начала?
Что такое «парадигма Веб 2.0»? smile

Автор: p0zt3r 2.7.2009, 16:36
SamDark, в доступной извне директории у меня лежит index.php, код которого я привёл выше. smile Ну и корневой .htaccess, в котором с помощью mod_rewrite и mod_redirect производится маппинг URI на физический 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  smile 

http://ru.wikipedia.org/wiki/Семантическая_паутина

Добавлено @ 16:37
А что такое "хороший набор классов"? Хороший набор классов появляется на стадии проектирования smile сейчас я реализации пишу по-тихоньку. Это самое объёмное, ибо надо написать типовые модули вроде "корп.сайт", "блог", "магазин".

Добавлено @ 16:38
да! и ещё клиентский фреймворк кодить надо. это вообще ацкий геморой будет.

Добавлено @ 16:40
Да. И какая вообще статика? Покажите мне хоть один вебдванольный сайт, в котором есть хоть одна статическая страница! Статики вообще не должно быть, т.к. она подмножество динамического контента, выражаясь философски smile

Добавлено @ 16:44
Моё видение Веб 2.0:
  • связываемость сервисов и Rich Internet Apps, SaaS
  • метаданные страниц
  • социальные сети, социальный Интернет
  • клиентский AJAX-фронтэнд
  • доступность для людей с ограниченными возможностями
  • многоязычность
  • подстраиваемость системы под посетителя
  • возможности WebDAV
  • векторная программная графика и все формы XHTML

Автор: SamDark 2.7.2009, 17:24
p0zt3r, 
Так зачем был вопрос про расширения, если по-хорошему наружу и так ничего не торчит?

Цитата
А что такое быдлокодинг?

Бездумное написание кода «лишь бы работало». Очень и очень отличается от грамотного кода в любом стиле. Как правило такой код не может быть использовать повторно или дописан достаточно быстро.

Цитата
И какая вообще статика? Покажите мне хоть один вебдванольный сайт, в котором есть хоть одна статическая страница! Статики вообще не должно быть, т.к. она подмножество динамического контента, выражаясь философски 

Статика = CSS, JS, картинки, файлы.

Цитата
Моё видение Веб 2.0

Вот это уже хорошо. Советую не употреблять слова «Веб 2.0». Пошло звучит ;)

Автор: ksnk 2.7.2009, 17:32
Я вообще-то хотел сказать, что если в файле Auth.php описан только класс, и никакого вызова его нет (как, я надеюсь, и принято писать), то умный хакер все равно ничего не увидит, есть там die('restricted access') или просто ничего нет.

Автор: p0zt3r 2.7.2009, 17:43
SamDark, ну и CSS и картинки это не статика нифига. Скажем есть у тебя две версии сайта - одна в разработке, другая рабочая. Или версия сайта для слепых и версия сайта для тупых - можно конечно на клиент выгружать все эти варианты CSS и картинок и прочего "статического" контента, а можно выдавать скриптом. Производительность здесь не теряется, браузеры всё равно кэшируют эти страницы, появляется возможность учёта траффика сервера на уровне скрипта. Но всё это, я согласен, неубедительно.

С JS таже тема. Создал ты новую версию фреймворка и чё теперь? заменять файлы на сервере?

Ну если ты об этом. А ты работал когда-нибудь в крупной фирме, где кретин-менеджер, кретин-заказчик и кретин-проектировщик? И все тебя имеют за сроки? smile и не такие "стили программирования" могут появиться smile

SamDark, Веб 2.0 звучит вполне приемлимо. И моё видение это видение не моё.


ksnk, так или иначе обращение к Auth.php должно вызывать 403, а не пиз--ж CMS о restricted access. Есть стандарты, есть правила, так надо каким-то уродцам делать исключения вечно. А если я хочу, чтобы у меня картинка красивая показывалась при открытии напрямую "секретных" файлов? Мне чё, надо во всем этом joomla-кале исправлять указанную строку? Это уже и называется быдлокодинг - лишьбыкак!

Автор: youri 2.7.2009, 18:02
Цитата(p0zt3r @  2.7.2009,  17:43 Найти цитируемый пост)
ну и CSS и картинки это не статика нифига

не надо делать таких громких заявлений, если у тебя все генерируется динамически, это не значит, что у всех должно быть так
Цитата(p0zt3r @  2.7.2009,  17:43 Найти цитируемый пост)
Производительность здесь не теряется

проверял?
Цитата(p0zt3r @  2.7.2009,  17:43 Найти цитируемый пост)
Создал ты новую версию фреймворка и чё теперь? заменять файлы на сервере?

почему нет?
Цитата(SamDark @  2.7.2009,  17:24 Найти цитируемый пост)
Советую не употреблять слова «Веб 2.0». Пошло звучит ;)

+1
Цитата(p0zt3r @  2.7.2009,  17:43 Найти цитируемый пост)
так или иначе обращение к Auth.php должно вызывать 403, а не пиз--ж CMS о restricted access

кому должно? Сначала подумай, как туда браузер попасть может
Цитата(p0zt3r @  2.7.2009,  17:43 Найти цитируемый пост)
Есть стандарты, есть правила, так надо каким-то уродцам делать исключения вечно

Есть такая штука как "здравый смысл", так надо каким-то уродцам с ортодоксальными взглядами проповедовать свою единственно правильную точку зрения
Цитата(p0zt3r @  2.7.2009,  17:43 Найти цитируемый пост)
А если я хочу, чтобы у меня картинка красивая показывалась при открытии напрямую "секретных" файлов? Мне чё, надо во всем этом joomla-кале исправлять указанную строку?

нельзя создать систему, рассчитанную на любое изменение

Автор: p0zt3r 2.7.2009, 18:57
Цитата(youri @  2.7.2009,  18:02 Найти цитируемый пост)
проверял?

 smile 

Цитата(youri @  2.7.2009,  18:02 Найти цитируемый пост)
нельзя создать систему, рассчитанную на любое изменение

зачем тогда вообще создавать системы? чтобы плодить новых традиционалистов, только которые вообще не придерживаются никаких стандартов - не прошлых, не вымышленных?

Цитата(youri @  2.7.2009,  18:02 Найти цитируемый пост)
Сначала подумай, как туда браузер попасть может

неправильно набранный вручную пермалинк

Цитата(youri @  2.7.2009,  18:02 Найти цитируемый пост)
Есть такая штука как "здравый смысл"

Если бы всё держалось на "здравом смысле", Интернета вообще бы не было. Был бы только 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
Цитата
Ну если ты об этом. А ты работал когда-нибудь в крупной фирме, где кретин-менеджер, кретин-заказчик и кретин-проектировщик? И все тебя имеют за сроки?  и не такие "стили программирования" могут появиться 

Предпочитаю таких мест избегать.

Цитата
С JS таже тема. Создал ты новую версию фреймворка и чё теперь? заменять файлы на сервере?

Да.

Цитата
проверял?

Я проверял. Отдача через php не быстра.

Цитата
зачем тогда вообще создавать системы? чтобы плодить новых традиционалистов, только которые вообще не придерживаются никаких стандартов - не прошлых, не вымышленных?

Стандарты и изменения как-бы два разных совсем понятия…

Цитата
неправильно набранный вручную пермалинк

А какого чёрта что-то кроме index.php и картинок/CSS/JS доступно извне?

Цитата
Стиль быдлокодинга насаждается создателями самого PHP, как мы можем убедится из их официального сайта здесь.

Не там смотрим: http://framework.zend.com/

Цитата
ООП-парадигмы, которая, к сожалению, не полностью реализуема на этом языке.

Я что-то пропустил?

Цитата
К сожалению, PHP на Apache реализуется в виде mod'а.

А также CGI… и вообще, кто заставляет Apache использовать?

Цитата
не позволяет на уровне серверного сценария управлять дочерними процессами сервера

Хотите сказать, что процесс запустить из PHP нельзя?

Автор: youri 2.7.2009, 20:40
Цитата(p0zt3r @  2.7.2009,  18:57 Найти цитируемый пост)
зачем тогда вообще создавать системы? чтобы плодить новых традиционалистов, только которые вообще не придерживаются никаких стандартов - не прошлых, не вымышленных?

система, рассчитанная на любое изменение - идеал, для ее создания нужно бесконечное количество времени. Выдача картинки для "секретных" файлов - хз зачем нужно

Цитата(p0zt3r @  2.7.2009,  18:57 Найти цитируемый пост)
неправильно набранный вручную пермалинк

при некоторых архитектурах может и так. Но если пользователь вручную набирает URL, то он не испугается надписи Restricted access

Цитата(p0zt3r @  2.7.2009,  18:57 Найти цитируемый пост)
Если бы всё держалось на "здравом смысле", Интернета вообще бы не было. Был бы только HTML 2.0 и сайт 1994

обоснуй

Цитата(p0zt3r @  2.7.2009,  18:57 Найти цитируемый пост)
У PHP нет своего стиля

это и плюс и минус. Главное чтобы стиль был, а какой - не так важно

Цитата(p0zt3r @  2.7.2009,  18:57 Найти цитируемый пост)
Это всего лишь один язык из семейства Perl-подобных серверных языков. Исторически, PHP пришёл взамен Perl'а только из-за того, что содержал удобный фреймворк для работы с HTTP-аттрибутами, сессиями, сокетами, sendmail и др. и для рядового кодера представлял собой адаптацию Perl'а к задачам WWW. Переход к PHP многих разработчиков вернул в языки со строгим синтаксисом, в тоже время создав возможности для быстрой разработки веб-сайтов.

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 многих разработчиков вернул в языки со строгим простым синтаксисом

Цитата

Стиль быдлокодинга насаждается создателями самого PHP, как мы можем убедится из их официального сайта здесь.

затрудняюсь с комментариями. Возможно для их сайта такой стиль приемлем. Но я бы не рискнул назвать это быдлокодингом

Цитата(p0zt3r @  2.7.2009,  18:57 Найти цитируемый пост)
Я считаю, что в эпоху RAD, создание приложений должно производится с помощью CASE-технологий

каких CASE-технологий не хватает php?

Цитата(p0zt3r @  2.7.2009,  18:57 Найти цитируемый пост)
использование всех доступных возможностей ООП-парадигмы, которая, к сожалению, не полностью реализуема на этом языке

вам шашечки или ехать нужно?

Цитата

правильный и адекватный стиль программирования на PHP это использование всех доступных возможностей ООП-парадигмы, которая, к сожалению, не полностью реализуема на этом языке

так что ли?
http://www.phppatterns.com/docs/design/hello_world_in_patterns

http://php.net/manual/en/functions.anonymous.php, кстати, появились в php-5.3.0

Цитата

API Apache'а очень просто и не позволяет на уровне серверного сценария управлять дочерними процессами сервера

чего тебе не хватает?

Автор: Sentox 2.7.2009, 22:19
Цитата

В тему топика.

В одной хорошей книжке по PHP 5 есть бестолковый пример:

Код

class Circle
{
  function draw () { echo "круг";}
}

class Square
{
 function draw () { echo "квадрат";
}

function ShapeFactoryMethod ($shape)
{
switch ($shape)
{
case "Circle": return new Circle ();
case "Square":  return new Square ();
}
}

ShapeFactoryMethod ("Circle")->draw ();
ShapeFactoryMethod ("Square")->draw ();


Конечно, в соответствии с парадигмой ООП, эта задача должна быть разрешена так:
Код

abstract class IDrawableShape
{
abstract public function draw ();
}

class Circle implements IDrawableShape {...}
class Square implements IDrawableShape {...}
...
class SomeNewUserShape implements IDrawableShape {...}


Но есть одно НО.  В компилируемых языках программирования, интерфейсы появились для того, чтобы сторонний программист мог не зная реализации пользовался классом, скомпилированным другим разработчиком. В сущности, интерфейс (в том числе и COM/ActiveX) это всего лишь таблица функций и свойств, которая аналогична таблице функций в DLL и SO-файлах и представляет собой метаданные какой-либо модели предметной области. Прежде всего, нужно обратить внимание, что это особенность компилируемых языков,  в которых нужно сделать классу условно говроря "фасад" для стороннего разработчика.

В PHP же, неважно как наследуется класс и по сути само наследование, его роль в PHP, размыта, поэтому два приведенных кода вверху семантически равнозначны. 
Т.е. наличие у класса того или иного метода определяется интерпретатором динамически. Такая же особенность есть и в JS. А вот в AS, например, при генерации компилированного SWF, интерпретатор(компилятор?) анализирует ООП-модель на наличие в ней реализаций методов.

Ну и как здесь быть? Если у класса был описан метод draw() и программист к нему обратился, ему не важен абстрактный класс IDrawableShape. И что по этому поводу может сказать PHP Manual? Да ничего! Делай, к


Вот уж странно, во первых абстрактный класс не имплементируется, а во вторых интерфейсы и то что красным выделено относится и к PHP.
Судя по всему Вы даже не описали интерфейса для абстрактного класса, почему и спутали интерфейсы с абстрактными классами.

Цитата

интерпретатор(компилятор?) анализирует ООП-модель на наличие в ней реализаций методов.

Ещё страннее что PHP то же самое делает особенно когда описан интерфейс для классов.

Автор: p0zt3r 2.7.2009, 22:35
Цитата(Sentox @  2.7.2009,  22:19 Найти цитируемый пост)
Вот уж странно, во первых абстрактный класс не имплементируется

а что он делает?  smile 

Цитата(Sentox @  2.7.2009,  22:19 Найти цитируемый пост)
Судя по всему Вы даже не описали интерфейса для абстрактного класса, почему и спутали интерфейсы с абстрактными классами.

упс smile напартачил. Однако, не вижу принципиальной разницей между интерфейсом и абстрактным классом в данном контексте. extends вместо implements, конечно.

Что-то я реально нагнал тут воды какой-то. Прочитал топик http://forum.vingrad.ru/forum/topic-71335.html и всё проросло само собой.

Просто не надо было путать тёплое с мягким.

И всё же зачем нужен интерфейс в PHP? в указанном топике, один из авторов говорит, что для удобства программирования. я тоже так считаю, и об этом указал в своём посте про интерфейсы  в компилируемых языках.

Автор: Sentox 2.7.2009, 22:42
Да я сам нередко поднимал эти вопросы по началу, насчёт интерфейсов.
Честно говоря многие мало понимают мощности интерфейсов.
Вы правильно говорили 
Цитата

 В компилируемых языках программирования, интерфейсы появились для того, чтобы сторонний программист мог не зная реализации пользовался классом, скомпилированным другим разработчиком. В сущности, интерфейс (в том числе и COM/ActiveX) это всего лишь таблица функций и свойств, которая аналогична таблице функций в DLL и SO-файлах и представляет собой метаданные какой-либо модели предметной области. Прежде всего, нужно обратить внимание, что это особенность компилируемых языков,  в которых нужно сделать классу условно говроря "фасад" для стороннего разработчика.


Особенно обеспечить парадигму ООП.Например как в С++ надо обязательно типизировать передаваемые аргументы так и здесь:
Код

<?
function draw(IDrawableShape $class)
{
    ......
}
?>

Это обеспечит правильность функционирования допустим метода.

Автор: icewind 3.7.2009, 00:37
Использованием интерфейсов обеспечивается возможность множественного наследования, а не только для удобства ( хотя не без этого ). Абстрактный класс здесь не при чем.
Цитата(p0zt3r @  2.7.2009,  18:57 Найти цитируемый пост)
Стиль быдлокодинга насаждается создателями самого PHP, как мы можем убедится из их официального сайта здесь.

Быдлокодинга как самостоятельного понятия нет. Есть быдлокодеры, которые могут выдавать шедевры на ЛЮБОМ языке. Каждая возможность создана для конкретной задачи... Классы и интерфейсы это часть php и использование всех применимых парадигм ооп тоже.

Автор: p0zt3r 3.7.2009, 00:38
Вот такую --ету по-вашему возможно использовать для всего-навсего врапера БД? Ну на phpDoc не обращайте внимания )

Код

<?php
/**
* @package DB Abstract
* @author Vladimir Ignatyev
* @version 1.0
*/
  
  /**
  * @todo must move to the constants.inc
  */
  define ('K_AS_NATIVE', '0');
  define ('K_AS_JSON', '1');
  define ('K_AS_XML', '2'); 
  // --
  
  
  /**
  * KIParametric realizes __get/__set methods
  * @todo must move
  */
  interface KIParametric
  {     
    public function __set ( $name, $value );
    public function __get ( $name );
    
  }
  
  /**
  * Interface represents the object get up from DB
  * @name KIDBObject 
  */
  interface KIDBObject
  {
    abstract public function __construct ();      // must fetch_array
    abstract public function getData ( $howtoget = K_AS_NATIVE );     //
  } 
  
  /**
  * Kappa iterator
  */
  
  interface KIterator extends Iterator//, KLCClass 
  {
      
  }
  
  /**
  * The class represents the entity set of any data objects to operate with. In DB representation
  * it is an array of entities responsed by DB on SQL-query
  * @name KAEntitiesArray
  * @abstract 
  */
  abstract class KAEntitiesArray implements KIterator  //, KLCClass //init,shut,doJobs class
  {
      protected $objectsArray;
      protected $position = 0;
      
      abstract public function __construct ();      //must create KDBObject and __construct
      
      abstract public function __destruct ();       //must kill all DBObjects
      
      public function current ( ) { return $this->objectsArray [$position]; }
      
      public function key ( ) { return $position; }
      
      public function next ( ) { $position++; }
      
      public function rewind ( ) { $position--; }
      
      public function valid ( ) 
      {
          if (($position<0)||($position>count($this->objectsArray))) { return false; }
          return true;
      }
  }
  
  
  /**
  * Simply implements the @link(KIParametric)
  */
  class KDataSource implements KIParametric 
  {
      protected $pairs;
      public function __set ($name, $value) { $this->pairs[$name]=$value; return $this->pairs[$name];}
      public function __get ( $name ) 
      { 
          if (array_key_exists($name, $this->pairs))
          {
            return $this->pairs[$name]; 
          }
          
          return $this->__set ($name,0);
      }
      
       public function __isset($name) 
       {
            return isset($this->pairs[$name]);
       }

       public function __unset($name) 
       {
            unset($thisp->pairs[$name]);
       }
  }
  
  /**
  * KIDatabase is a database interface.
  */  
  interface KIDatabase //extends KILCClass
  {
      public function connect ( KDataSource &$params = 0 );
      public function query ( $sql='' );
      public function close ();             
  }
         
?>


Автор: MoLeX 3.7.2009, 06:09
Цитата(p0zt3r @  2.7.2009,  14:59 Найти цитируемый пост)
MoLeX, потому что PHP-файлы имеют права executable. Но php-файлы с описанием классов или плугинов в Joomla, например, незапускные. 
Поэтому рационально и логически правильно использовать .inc для незапускных файлов, а .php для запускных файлов приложения

глупо и не нужно.


Цитата(ksnk @  2.7.2009,  15:42 Найти цитируемый пост)
А что будет, если я, к примеру, описал класс Auth с секретными паролями в файле Auth.php и злой хакер открыл его в своем броузере по адресу

если ему удалось завладеть паролями, то в этом случае виноват только разработчик


Сам при создание сайтов использую такой подход
.htaccess
Код

RewriteEngine on
RewriteCond $1 !^(index\.php|img|js|css)
RewriteRule ^(.*)$ /index.php/$1 [L]


и все, можно этим и ограничиться. А если ты законченный параноик то в каждый файл 
Код

<?php    if ( ! defined('C')) {header("HTTP/1.0 400 Bad Request"); header("HTTP/1.1 400 Bad Request"); header("Status: 400 Bad Request"); exit();}

.....
?>


но все это лишние - все модули выносим из www (html_public и т.д.), оставляем тока необходимый минимум

Автор: solenko 3.7.2009, 08:16
Цитата(icewind @  2.7.2009,  23:37 Найти цитируемый пост)
Использованием интерфейсов обеспечивается возможность множественного наследования, а не только для удобства ( хотя не без этого ). Абстрактный класс здесь не при чем.

Это ж каким образом? Или я отстал от жизни и интерфейсы уже могут содержать реализацию?

Автор: icewind 3.7.2009, 10:15
Цитата(solenko @  3.7.2009,  08:16 Найти цитируемый пост)
Это ж каким образом? Или я отстал от жизни и интерфейсы уже могут содержать реализацию? 

Нет, все правильно. Интерфейсы содержать реализацию не могут. Я имел ввиду наследование от нескольких интерфейсов. Фактически мы можем наследовать класс от множества абстрактных сущностей. 

Автор: Sentox 3.7.2009, 12:16
Цитата(icewind @ 3.7.2009,  10:15)
Цитата(solenko @  3.7.2009,  08:16 Найти цитируемый пост)
Это ж каким образом? Или я отстал от жизни и интерфейсы уже могут содержать реализацию? 

Нет, все правильно. Интерфейсы содержать реализацию не могут. Я имел ввиду наследование от нескольких интерфейсов. Фактически мы можем наследовать класс от множества абстрактных сущностей.

Implements - это реализация, 
Extends - расширение (наследование)
В переводе вроде так.

Цитата

Я имел ввиду наследование от нескольких интерфейсов. Фактически мы можем наследовать класс от множества абстрактных сущностей.


А вот это уже вкорне не правильно. 

Автор: cia 15.4.2011, 17:54
Цитата

иначе как ты сделаешь так, чтоб твои файлы не скачивали и смотрели через веб? .htacces? а если он запрещен? Если вообще сервер не apache? 

а как можно увидеть или скачать Php-файл через браузер?


Автор: Muerto 15.4.2011, 17:58
cia, Почитайте о том что такое php в гугле, ответ - никак.
При условии что сервер функционирует верно...
Что бы украсть чужой php код нужно так или иначе взламывать сайт/сервер

Автор: cia 15.4.2011, 18:13
Цитата

1. Какое расширение у include-файлов в ваших PHP-скриптах?

А что такое "include-файлы"? И чем они отличаются от php-файлов?

Цитата

2. Как Вы считаете: имеет ли смысл безоговорочно и полностью переходить на кодинг в PHP в Java-стиле? 

Нет, не имеет - однозначно. На Php нужно программировать в стиле Php, на c++ - в стиле с++, на java - в стиле java. И вообще, что понимать под "стилем java"?

Цитата

Как Вы используете возможности callback 

Так, как регламентирует документация ))

Цитата

Как Вы используете возможности динамической типизации, если можно её так назвать, в PHP?

А как её можно использовать или не использовать? Она тупо есть.
Вопрос на засыпку: как можно использовать тот факт, что float - это число с дробной частью?

Цитата

3. Какой бы хотели Вы видеть API "Самой удобной, гибкой и мощной CMS в мире"?

Самая гибкая цмс - это фреймворк. Самая удобная... смотря для кого: для пользователя или программиста. Я лично хотел бы видеть минимальный объём апи вообще, но с возможностью при необходимости легко и быстро подключить требуемые мне модули, реализующие тот или иной функционал (разумеется, должна быть чёткая и ясная документация по всем модулям). При этом такое подключение должно вызывать минимальные накладные расходы и как можно ближе сводиться к простому include_once.
Если собрались делать супер-мощную цмс, то какие-то странные вопросы smile.
А вообще (имхо) лучше почитать документцию по PHP - сразу станут очевидны все особенности этого языка и отличия от Java.

Автор: ksnk 15.4.2011, 18:15
сообщения в этом топике имеют 2-х годичную выдержку... 

Автор: cia 15.4.2011, 18:33
Цитата(Muerto @  15.4.2011,  17:58 Найти цитируемый пост)
ia, Почитайте о том что такое php в гугле, ответ - никак.
При условии что сервер функционирует верно...
Что бы украсть чужой php код нужно так или иначе взламывать сайт/сервер

И я о том же.


Цитата(ksnk @  15.4.2011,  18:15 Найти цитируемый пост)
сообщения в этом топике имеют 2-х годичную выдержку...  

Ага. Только я это заметил уже после того, как написал сообщение  smile . Каюсь.  smile 

Автор: Muerto 15.4.2011, 19:25
cia,под стилем Java/C++ имеется ввиду синтаксис языка...

Автор: Sanchezzz 16.4.2011, 02:28
боже опять эта тема всплыла +)) ждем еще год пока кто то суда запостит пост)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)