Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
894
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4350
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
PHP включает в себя против OOP
Я хотел бы иметь ссылку на плюсы и минусы использования include files vs objects(classes) при разработке приложений PHP.
Я знаю, что мне было бы полезно иметь одно место, чтобы пойти на это answer...I есть несколько собственных мнений, но я с нетерпением жду, чтобы услышать других.
простой пример:
Некоторые страницы на моем сайте доступны только зарегистрированным пользователям. У меня есть два варианта реализации (есть и другие, но давайте ограничимся этими двумя)
Создайте файл authenticate.php и включите его на каждой странице. Он содержит логику для аутентификации.
Создайте объект пользователя, который имеет функцию аутентификации, ссылайтесь на объект для аутентификации на каждой странице.
Edit я хотел бы увидеть, как можно взвесить преимущества одного над другим. Мои текущие (и слабые причины) следуют:
Включает в себя - иногда функция-это просто easier/shorter/faster называть Объекты-группировка функциональных возможностей и свойств приводит к более длительному обслуживанию.
Включает в себя-меньше кода для записи (нет конструктора, нет синтаксиса класса) назовите меня ленивым, но это правда.
Объекты -сила формальности и единый подход к функциям и созданию.
Включает в себя-легче для новичка, чтобы иметь дело с Объекты-сложнее для новичков, но не одобряются профессионалами.
Я смотрю на эти факторы в начале проекта, чтобы решить, хочу ли я делать включения или объекты. Это несколько плюсов и минусов с моей головы.
Это не совсем противоположные варианты выбора. Вам все равно придется включить проверочный код. Я прочитал Ваш вопрос как процедурное программирование против программирования OO.
Написание нескольких строк кода или функции и включение их в заголовок страницы - Вот как это делается в PHP3 или PHP4. Это просто, это работает (так мы сделали это в osCommerce, например, в приложении eCommerce PHP).
Но это не так просто поддерживать и изменять, как могут подтвердить многие разработчики.
В PHP5 вы бы написали пользовательский объект, который будет нести свои собственные данные и методы аутентификации. Ваш код будет понятнее и проще в обслуживании, поскольку все, что связано с пользователями и аутентификацией, будет сосредоточено в одном месте.
Хотя этот вопрос затрагивает несколько очень спорных вопросов (OOP, аутентификация пользователя), я пропущу эти и второй комментарий Конрада о __autoload. Любой, кто знает C/C++, знает, как много боли может быть, включая файлы. С autoload, добавлением PHP5, если вы решите использовать OOP (что я делаю почти исключительно), вам нужно только использовать какое-то стандартное соглашение об именовании файлов и (я бы рекомендовал) ограничить один класс на файл, и PHP сделает rest за вас. Очищает код, и вам больше не нужно беспокоиться о том, чтобы помнить об удалении включений, которые больше не нужны (одна из многих проблем с включениями).
У меня нет большого опыта PHP, хотя я использую его на своей нынешней работе. В общем, я считаю, что большие системы выигрывают от читаемости и понятности, которые обеспечивает OO. Но такие вещи, как последовательность (не смешивайте OO и не OO) и ваши личные предпочтения (хотя только на самом деле в личных проектах), также важны.
Я научился никогда не использовать include в PHP, кроме как внутри основных библиотек, которые я использую, и одной центральной include из этих библиотек (+config) в приложении. Все остальное обрабатывается глобальным обработчиком __autoload , который может быть настроен для распознавания различных необходимых классов. Это можно легко сделать, используя соответствующие соглашения об именовании для классов.
Это не только гибко, но и довольно эффективно и сохраняет чистоту архитектуры.
Не могли бы вы быть немного конкретнее? Для примера, который вы приводите, вам нужно использовать include в обоих направлениях. В случае 1 вы включаете только файл, в случае 2 вам нужно включить файл класса (например user.class.php), чтобы разрешить создание экземпляра пользовательского класса.
Это зависит от того, как строится rest приложения, это OO? Используйте OO.
Независимо от того, делаете ли вы это в классах или в более процедурном стиле, вам просто нужно проверить, чтобы убедиться, что:
- Есть сеанс связи;
- Что сеанс является действительным; и,
- Что пользователь, владеющий сеансом, имеет соответствующие привилегии.
Вы можете инкапсулировать все три шага в одну функцию (или статический метод в классе сеанса может работать). Попробовать это:
class Session
{
const GUEST = 0;
const SUBSCRIBER = 1;
const ADMINISTRATOR = 2;
public static function Type()
{
session_start();
// Depending on how you use sessions on
// your site, you might just check for the
// existence of PHPSESSID. If you track
// every visitor with sessions, however, you
// might want to assign some separate unique
// number (that you can track in a DB) to
// authenticated sessions
if(!$_SESSION['uniqid'])
{
return Session::GUEST;
}
else
{
// For the best security, don't store the
// user's access permissions in the $_SESSION,
// but rather check against the DB. This will
// ensure that recently deleted or downgraded
// administrators will not be able to make use
// of a previous session.
return THE_ACCESS_LEVEL_ACCORDING_TO_THE_DB
}
}
}
// In your files that need to check for authentication (you
// could also do this in a controller if you're going MVC
if(!(Session::Type() == Session::ADMINISTRATOR))
{
// Redirect them to wherever you want them to go instead,
// like a log in page or something like that.
}