Skip to content

Автозагрузка в PHP: начали за здравие, а кончили за упокой

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

Установка PHP 5.4 на CentOS 6.2

Вольный перевод статьи.
На своей машине я использовал 32-х разрядную систему, поэтому листинги изменены. Для установки PHP 5.4 на 64-х разрядную систему ознакомьтесь с оригиналом.

Если вы не в курсе, в прошлый четверг вышел PHP 5.4. Естественно, я решил, что настало время установить и попробовать его. Для установки я выбрал чистый CentOS 6.2 на виртуальную машину на основе VirtualBox. Я сделал это по двум причинам: 1) я хотел чистое окружение для установки и 2) я хотел поиграть с CentOS. На момент написания статьи официальный CentOS RPM с PHP 5.4 еще не вышел, поэтому мне пришлось собирать PHP из исходников. Ниже приведены заметки, которые были сделаны по ходу процесса установки и сборки. Надеюсь вы найдете их полезными.
Тег «Далее»

Использование Zend\Loader\Autoloader

Вдогонку к предыдущему посту
Вольный перевод статьи

Автоматическая загрузка классов — это процесс в PHP, посредством которого система пытается загрузить класс при первом обращении (через new или class_exists) если до этого он не был загружен через require или include. Автозагрузка использует функцию __autoload либо выполняет любой метод, зарегистрированный с помощью spl_autoload_register.
Zend Framework 2 предоставляет компонент Zend\Loader\Autoloader для автоматической загрузки Zend Framework или ваших собственных классов.

Что это дает?

Автозагрузчик ZF2 предоставляет:

  • PSR-0 совместимую include_path автозагрузку
  • PSR-0 совместимую по-префиксную или автозагрузку из пространства имен
  • Автозагрузка соответствий классов, включающая генерацию карты классов
  • Фабрика автозагрузчика для загрузки нескольких автозагрузочных стратегий за раз

Он предоставляет этот функционал через два класса: StandardAutoloader и ClassMapAutoloader.
Тег «Далее»

Автоматическая загрузка классов в PHP и PSR-0 стандарт

Краткий пересказ поста с примерами.

Допустим у вас есть файл Rectangle.php, который содержит определение класса Rectangle. Прежде чем создать экземпляр объекта где-то в коде, вначале вы должны вызвать Rectangle.php файл, что-то вроде этого:

<?php
require "Rectangle.php";
$rect = new Rectangle(42, 25);

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

В этой статье я пройдусь по «истории автоматической загрузки классов». После я представлю вам ClassLoader компонент Symfony2 для PHP 5.3, который следует PSR-0 стандарту.
Внимание: большая часть примеров исходников в начале статьи демонстрирует устаревший подход. Неразумно будет использовать его на продакшне. Я рекомендую вам использовать вместо этого один из PSR-0 стандартов автоматической загрузки классов.
Тег «Далее»

Countable interface

Краткий пересказ поста с примерами.
Countable interface является частью SPL и описывает использование стандартной функции count() для объекта.
Все что вам нужно — это определить Countable::count() метод для своего класса таким образом, что бы он возвращал integer. Тогда при вызове функции count() php интерпритатор автоматически обратится к этому методу и выдаст соответствующий результат. Ниже приводятся несколько простых примеров использования интерфейса.

Доступ к защищенным или закрытым свойствам класса

Самый простой способ использования интерфейса Countable — это получить количество элементов массива, который определен как защищенное или закрытое свойство объекта.

class SomeClass implements Countable {

 protected $_data = array();

 public function doSomething()
 {
//Code to change $_data here
 }

 public function count()
 {
     return count($this->_data);
 }
}

В данном примере какие то данные хранятся в объекте в виде массива и метод Countable::count просто возвращает количество элементов этого массива.
Тег «Далее»

/ VS побитовое деление

Вольный пересказ поста.

Сравнение побитового деления и «/» оператора в Php.
Важно отметить, что результаты зависят от машины и окружения.
Итак, для «/» код:

function divide($n = 1)
{
	$a = microtime(true);
	for ($i = 0; $i < $n; $i++) {
		300/2;
	}
	echo microtime(true) - $a;
}

divide(100);
//divide(1000);
//divide(10000);
//divide(100000);
//divide(1000000);
//divide(10000000);

Для побитового деления:

function bitwise($n = 1)
{
	$a = microtime(true);
	for ($i = 0; $i > 1;{
		300 >> 1;  
	}
	echo microtime(true) - $a;
}

bitwise(100);
//bitwise(1000);
//bitwise(10000);
//bitwise(100000);
//bitwise(1000000);
//bitwise(10000000);

Результаты:
Тег «Далее»

MageConf

Ходил вчера на MageConf. Сильно заинтригован будущим X.commerce. Jeromy Carrirere много чего рассказывал и показывал. Судя по докладу, платформа должна объединить все ebay сервисы в один и дать еще кучу плюшек для интеграции с другими системами. Так что жду. А вот Magento 2 можно скачать уже сейчас c github. Как я понял из доклада Дмитрия Сороки, это просто большой рефакторинг первой версии, к сожалению, без обратной совместимости. Немного смутил доклад Евгения Тулика «Взаимодействие с асинхронными системами на PHP». Все время крутился вопрос: зачем такое воротить на PHP?!! Доклад Андрея Майбородского «Разработка для Magento. Пишем модуль правильно» разочаровал. Для новичков, не знающих как писать модули, он мало полезен, а для знающих — бесполезен вовсе, т. к. говорились явно очевидные вещи (единственный плюс: повторение — мать учения). Во время доклада Александра Бомко «Инсталляторы и расширения» был задан вопрос «Как я понял Magento это такая CMS вроде Joomla?» Это поставила в тупик докладчика и вызвало волну твиттов по теме. Вторую волну поднял Сергей Смертин, случайно обмолвившись, что нормальные IDE это PhpStorm, NetBeans, Eclipse, но никак не vim. От себя могу сказать, что vim это действительно не IDE, но благодаря плагинам он может спокойно получить все необходимое для IDE. Другой вопрос, что это все не из коробки, и для освоения редактора необходимо потрать какое то время. Доклад Витали Коротуна «Я, Интернет» бул посвящен эзотерике, метапрограммированию и Кин-дза-дза. Однако не был упомянут подход «Грамотное программирование». Тонкий троллинг по теме. Не зря в конце был задан вопрос «А что вы читаете?»
P. S. Еще у меня есть такая кружка:

Отслеживать

Настройте получение новых записей по электронной почте.

%d такие блоггеры, как: