Менеджер контактов на Backbone + Laravel. Серверная часть.

Начнем с настройки и написания серверной части. Я продолжаю использовать в качестве бэкэнда PHP фреймворк Laravel. Создадим модель Contact и таблицу Contacts в БД. Установим между ними связь и забьем таблицу данными.

Continue reading «Менеджер контактов на Backbone + Laravel. Серверная часть.»

Что такое Dependency Injection

Если вы занимаетесь разработкой программного обеспечения хотя бы какое-то время, вы, скорее всего, уже натыкались на термин «dependency injection» или «внедрение зависимости». Если вы ещё только-только присоединились к миру разработки ПО, то, вероятно, пока старались избегать попыток разобраться с этой концепцией. Но что бы вам ни казалось, внедрение зависимости является отличным инструментом при разработке поддерживаемого и тестируемого кода. Вот отличная статья по теме.

Что такое __call() и __callStatic()?

Допустим у вас есть класс, описывающий методы и свойства какого-либо объекта (что, в принципе, логично). Представьте, что вы решили обратиться к несуществующему методу этого объекта. Что вы получите? Правильно — фатальную ошибку! Ниже привожу простейший код.

[cc name=»ex1″/]

Так вот, иногда возникает необходимость либо выполнить какой-то код при отсутствии нужного нам метода, либо узнать какой метод пытались вызвать, либо использовать другое API для вызова нужного нам метода. С этой целью и существуют методы __call() и __callStatic() — они перехватывают обращение к несуществующему методу в контексте объекта и в статическом контексте, соответственно.

Continue reading «Что такое __call() и __callStatic()?»

Замыкания в PHP

Я очень люблю JavaScript за то количество плюшек полезностей, которые у него есть. Одна из таких полезностей — это замыкания. И вот это прелесть появилась в PHP (начиная с версии PHP 5.3) .

Давайте рассмотрим, что же такое — замыкание в PHP.

[cc name=»example1″/]

Очень удобно применять анонимные функции и для фильтрации:

[cc name=»example2″/]

Замыкания идеально подходят в качестве обработчиков событий. Например:

[cc name=»example3″/]

Ну и так далее… вот очень хороший обзор замыканий в PHP на хабре

Паттерн Singleton — одиночка и его реализация в PHP и JavaScript

Singleton в метафорах:
Один из самых известных и, пожалуй, самых спорных паттернов.
Представьте, что в городе требуется организовать связь между жителями. С одной стороны мы можем связать всех жителей между собой протянув между ними кабели телефонных линий, но полагаю вы понимаете насколько такая система неверна. Например, как затратно будет добавить еще одного жителя в связи (протянуть по еще одной линии к каждому жителю). Чтобы этого избежать, мы создаем телефонную станцию, которая и будет нашим «одиночкой». Она одна, всегда, и если кому-то потребуется связаться с кем-то, то он может это сделать через данную телефонную станцию, потому что все обращаются только к ней. Соответственно для добавления нового жителя нужно будет изменить только записи на самой телефонной станции. Один раз создав телефонную станцию все могут пользоваться ей и только ей одной, в свою очередь эта станция помнит всё что с ней происходило с момента ее создания и каждый может воспользоваться этой информацией, даже если он только приехал в город.
Основной смысл «одиночки» в том, чтобы когда вы говорите «Мне нужна телефонная станция», вам бы говорили «Она уже построена там-то», а не «Давай ее сделаем заново». «Одиночка» всегда один.
Если бы стояла задача описать этот паттерн одной фразой, то она получилась бы примерно следующей: Singleton — это класс, который может иметь только один экземпляр.

Continue reading «Паттерн Singleton — одиночка и его реализация в PHP и JavaScript»

Трейты

Начиная с версии 5.4.0 PHP вводит инструментарий для повторного использования кода, называемый трейтом.

Трейты (англ. traits) — это механизм обеспечения повторного использования кода в языках с поддержкой единого наследования, таких как PHP. Трейты предназначены для уменьшения некоторых ограничений единого наследования, позволяя разработчику повторно использовать наборы методов свободно, в нескольких независимых классах и реализованных с использованием разных архитектур построения классов. Семантика комбинации трейтов и классов определена таким образом, чтобы снизить уровень сложности, а также избежать типичных проблем, связанных с множественным наследованием и c т.н. mixins.

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

[cc name=»example»/]

Continue reading «Трейты»

PHP — вопросы и ответы (Часть 2)

ООП

Какая разница между $this и self в PHP?

$this используется для вызова не статических методово и свойств классов, а ключевое слово self используется для вызова статических членов класса.

Возможности ключегого свойства self не ограничиваются вызовом статических членов класса, в контексте нестатических свойств self также обеспечивает возможность обхода таблиц виртуальных методов для текущего объекта. Например, parent::methodName() вызывает метод родительского класса, а self::methodName() вызывает метод, который реализован в текщем классе.

 

Сколько типов данных в РНР?

  1. PHP поддерживает восемь простых типов данных:

    • Четыре скалярных: bool, integer, float, string

    • Два смешанных типа: array, object

    • Два специальных типа: resource, NULL

  2. Существет также несколько псевдотипов: mixed (mixed говорит о том, что параметр может принимать множество (но не обязательно все) типов), number (number говорит о том, что параметр может быть либо integer, либо float.) и callback (Некоторые функции, такие как call_user_func() или usort() принимают в качестве параметра определенные пользователем callback-функции. Callback-функции могут быть не только простыми функциями, но также методами объектов, включая статические методы классов.)

Continue reading «PHP — вопросы и ответы (Часть 2)»

PHP — вопросы и ответы (Часть 1)

Стандартные функции, замыкания

Как перевернуть массив? Есть массив array(‘h’, ‘e’, ‘l’, ‘l’, ‘o’), как из него получить array(‘o’, ‘l’, ‘l’, ‘e’, ‘h’)? и получить из него первые 10 елементов?

Функция array_reverse() возвращает перевернутый масив

Какая разница между require(), require_once(), include() и include_once()?

  1. include() — функция не проверяет был ли уже включен файл или нет, а подключает его снова. Т.е если в файле были инициализированны переменные, то они переопределяться.

  2. require() — функция аналогичная include(), но если вызываемогофайла нет(например файла inc.php нет или мы укажем неверный путь) то require() остановит выполнение скрипта, а при include() выполнение продолжиться.

  3. include_once() — функция включения дополнительного файла включаеться только один раз, те если есть необходимость включения файла в которомидет определение функций, класов или переменных и есть необходимость что бы они не переопределялись, то нужно использовать include_once().

  4. require_once() — функция аналогичная include_once(), но с замечаниями как и для recquire().

 

Как перевернуть строку?

Функция strrev() переворачивает строку

  Continue reading «PHP — вопросы и ответы (Часть 1)»