PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (183): « 1 [2] 3 4 5 6 7 8 9 ... » В конец

> Найдено сообщений: 2732
Bio man Отправлено: 12 Ноября, 2016 - 13:46:05 • Тема: посоветуйте lamp стек • Форум: Программное обеспечение

Ответов: 4
Просмотров: 2360
Появилась необходимость работы в линуксе (ubuntu), и вот нужно выбрать lamp стек.
Но после openserver все предложения в линуксе кажутся УГ.
Поделитесь лайфхаками.
Хотелось бы иметь быстрое переключение между версиями PHP, MySQL, быстрое и простое создание доменов.
Конечно, если "быстро и просто" возможно.
Bio man Отправлено: 06 Августа, 2016 - 23:10:56 • Тема: PHP-7.1.0beta2 + xdebug • Форум: Программирование на PHP

Ответов: 1
Просмотров: 618
Цитата:
Failed loading z:/windows/openserver/modules/php/PHP-7.1/ext/php_xdebug.dll

xdebug самый последний 2.4.1.

Как подружить?
Bio man Отправлено: 05 Июля, 2016 - 19:02:57 • Тема: Как создать движок • Форум: Вопросы новичков

Ответов: 8
Просмотров: 494
igosja, не так это все.
MVC не имеет никакого отношения к БД.
M = модель - некий объект хранящий какие-то данные. Слой БД нужно реализовывать отдельно и никоем образом не привязывать к моделям (не люблю yii за такую халатность)
V = вид - подсистема отображения. Это могут быть простые php файлы, в которых происходит подстановка переменных, так сложная система рендеринга.
C = контроллер - некий объект принимающий запросы и возвращающий результат

+ ко всему не обойтись без фронт-контроллера, роутера, репозиториев (как дополнение к моделям) и других плюшек, без которых жизнь становится сложной.

А просто MVC в вакууме не имеет практического применения, только в купе с другими паттернами (некоторые я назвал выше) этот паттерн будет полезен.
Bio man Отправлено: 25 Июня, 2016 - 01:03:49 • Тема: Тестовое задание • Форум: Объектно-ориентированное программирование

Ответов: 18
Просмотров: 4543
это не полиморфизм.
Цитата:
В языках программирования и теории типов полиморфизмом называется способность функции обрабатывать данные разных типов

https://ru.wikipedia.org/wiki/Полиморфизм_(информатика)
и еще

В кратце, полиморфизм в ООП это возможность работать с классами-наследниками, как с родительским.
PHP:
скопировать код в буфер обмена
  1. interface Super
  2. {
  3.         public function whoAmI();
  4. }
  5.  
  6. class A extends Super
  7. {
  8.         public function whoAmI()
  9.         {
  10.                 return "A";
  11.         }
  12. }
  13. class B extends Super
  14. {
  15.         public function whoAmI()
  16.         {
  17.                 return "B";
  18.         }
  19. }
  20.  
  21. function whoAreYou(Super $whoAmI)
  22. {
  23.         echo $whoAmI->whoAmI();
  24. }
  25.  
  26. $a = new A();
  27. $b = new B();
  28.  
  29. whoAreYou($a);
  30. whoAreYou($b);
  31.  

вот в чем разница. Если твои классы не будут унаследованы от какого-то базового, то они по сути будут иметь каждый свой интерфейс, и не важно, что интерфейсы совпадают. Когда появляется базовый класс, то классы-наследники наследуют интерфейс базового класса и у всех классов-наследников интерфейс становится единым, и теперь каждый класс можно заменить другим наследником.
Bio man Отправлено: 21 Июня, 2016 - 14:04:10 • Тема: подключить денвер к интернету • Форум: Apache и другие веб-серверы

Ответов: 1
Просмотров: 520
Ставь Open Server, он лучше и по твоему вопросу полно информации на их форуме.
Bio man Отправлено: 20 Июня, 2016 - 12:15:00 • Тема: Тестовое задание • Форум: Объектно-ориентированное программирование

Ответов: 18
Просмотров: 4543
Перегрузки методов и правда не хватает, но люди по разному решают эту задачу.
Например, через статические "конструкторы", как то так
PHP:
скопировать код в буфер обмена
  1. Logger::create();
  2. Logger::createFromConfig(...)

типо того.
karamba пишет:
Как будет использоваться полиморфизм в данном случае? В моем абстрактом классе нет ни одного поля или неабстрактного метода. Если мы создадим экземпляр каждого типа логирования и запишем в массив. Будем массив перебирать и вызывать метод logAdd(), то он будет одинаково работать и при существовании базового класса и без него.
что бы говорить о полиморфизме, обеим сторонам надо знать что это за зверь, у меня нет желанию разжовывать это, и так разжовано уже 100000 раз, надо лишь погуглить.
Bio man Отправлено: 19 Июня, 2016 - 17:42:11 • Тема: Тестовое задание • Форум: Объектно-ориентированное программирование

Ответов: 18
Просмотров: 4543
Что это за хрень с __construct0 итд?
karamba пишет:
Я только не понимаю для чего нужен общий абстрактный класс.
для полиморфизма. в таком случае мы работаем с любым логгером, будто он является абстрактным логгером.
Почитай основы ООП, такие вещи ты должен знать прежде чем говорить что твое ООП - ООП
https://www[dot]youtube[dot]com/user/pro[dot][dot][dot]00fox2/playlists
Bio man Отправлено: 17 Июня, 2016 - 21:59:58 • Тема: Использование переменной email • Форум: Вопросы новичков

Ответов: 1
Просмотров: 103
http://php.net/manual/ru/tutorial.forms.php
Bio man Отправлено: 17 Июня, 2016 - 21:56:34 • Тема: прошу помочь разобраться • Форум: Напишите за меня, пожалуйста

Ответов: 1
Просмотров: 32
Есть такая практика, называется отладка. Запусти код с xdebugger и пройдись пошагово, найди место где все слетает, и если не разберешься, приходи снова.
Поставь PhpStorm EAP (или лицензию, там бесплатный месяц дается), настрой дебагер и в путь. это не сложно.
Bio man Отправлено: 17 Июня, 2016 - 21:45:16 • Тема: Тестовое задание • Форум: Объектно-ориентированное программирование

Ответов: 18
Просмотров: 4543
интерфейс интерфейсом а конструктор конструктором. одно другому не мешает. пусть конструкторы отличаются, не вижу в этом проблемы. тем более, код станет понятнее, если конструктор будет принимать понятные параметры (поток, PDO, параметры БД), нежели универсальный DTO (если я правильно понял, что ты имел в виду под DTO).
LIME пишет:
например объект конфига
тут не соглашусь. как раз наоборот, компоненты должны объявляться в конфиге и конфигурироваться приложением при запуске, т.е. сам объект (логгер) ничего не должен знать о конфиге.

Например:
PHP:
скопировать код в буфер обмена
  1. // config
  2. return [
  3.   'components' => [
  4.     'logger' => [
  5.       'class' => DBLogger::class,
  6.       'table' => 'log',
  7.       'db' => 'app',
  8.       'user' => 'root',
  9.       'password' => '',
  10.     ],
  11.   ],
  12. ];
  13.  
  14. // DBLogger
  15. class DBLogger extends Logger
  16. {
  17.   public function __construct($user, $pass, $db, $table)
  18.   {
  19.     // magic
  20.   }
  21. }
  22.  
  23. class StreamLogger extends Logger
  24. {
  25.   public function __construct($stream)
  26.   {
  27.     // magic
  28.   }
  29. }

LIME пишет:
karamba попрактикуйся еще ...рано профессионально кодить
это уж точно.
(Добавление)
T1grOK пишет:
Все применимо - цепочка из одного звена. Но в любой момент количество звеньев можно нарастить, в чем вижу плюс - предусмотрительность к расширению возможностей.
YAGNI. Когда будет потребность - будем рефакторить, иначе это лишнее переусложнение. Тем более это 1 компонент, добавил класс, добавил по методу в логгеры и в путь.
Bio man Отправлено: 17 Июня, 2016 - 13:51:41 • Тема: Тестовое задание • Форум: Объектно-ориентированное программирование

Ответов: 18
Просмотров: 4543
T1grOK пишет:
Для подобных вещей очень кстати использование паттерна Chain of responsibility.
имхо это переусложнение. в задаче сказано, что писать логи нужно 1 логгером, что делает паттерн неприменимым в данной ситуации.
Bio man Отправлено: 17 Июня, 2016 - 01:53:47 • Тема: Тестовое задание • Форум: Объектно-ориентированное программирование

Ответов: 18
Просмотров: 4543
karamba пишет:
Почему?
потому что его нет.
в задании четко было сказано как надо делать.
во первых нужно выделить сущности.
- Logger: базовый абстрактный класс или интерфейс.
- StreamLogger: производный от Logger для записи логов в поток. В твоем случае это stdout.
- DBLogger: производный от Logger для записи логов в БД.
- FileLogger: производный от Logger для записи логов в файл.

StreamLogger принимает поток как параметр конструктора (в твоем случае php://stdout), открывает его и по завершению программы закрывает (в деструкторе).

DBLogger принимает параметром конструктора либо внешний объект для работы с БД (пусть будет PDO) либо принимает параметры для подключения к БД, и создает объект PDO сам.
Я бы предпочел первый вариант, он более оптимален в плане расширения. Тут вылезает полиморфизм - мы сможем подменить объект PDO на любой другой производный от PDO, а не хардкодим класс в логере.

FileLogger по сути лишний, так как есть StreamLogger, который может работать и с файловыми потоками.

Плюсом было бы написать логгер в соответствии с PSR-3, так как многие помешаны на PSR, и скорее всего посчитают плюсом.
И обязательно почитай PSR-1 и PSR-2, так как твой код ужасен.

Успехов!
Bio man Отправлено: 12 Июня, 2016 - 02:28:13 • Тема: Генерация уникальных чисел • Форум: Вопросы новичков

Ответов: 4
Просмотров: 293
Самый простой способ получить уникальное число http://php.net/manual/ru/function.microtime.php

Не понятно что требуется
Bio man Отправлено: 04 Июня, 2016 - 13:39:52 • Тема: php 7 Fatal error: Constant expression contains invalid operations • Форум: Если скрипт не работает

Ответов: 5
Просмотров: 8742
Мелкий пишет:
При объявлении свойства допустимо использовать некоторые операции.
Это какие? Насколько я знаю только константные значения могут быть присвоены (в том числе константы)
(Добавление)
потыркал пхп, оказывается константы тогоже класса он не видит.
кроме того, можно задавать арифметические, логические и побитовые выражения.
Bio man Отправлено: 04 Июня, 2016 - 13:37:15 • Тема: php 7 Fatal error: Constant expression contains invalid operations • Форум: Если скрипт не работает

Ответов: 5
Просмотров: 8742
PHP не поддерживает выражения в определении свойств. Придется задавать в конструкторе.

Страниц (183): « 1 [2] 3 4 5 6 7 8 9 ... » В конец
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB