(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Новое расширение PHP позволяет добавлять произвольные методы к скалярам

Источник: habrahabr
rsvasilyev

На Github появилось новое экспериментальное расширение PHP "scalar_objects", с помощью которого можно добавлять любые методы к числам, строкам, массивам.
Выглядит это примерно так:

$result = $string->replace('shit', 'candy')->remove(',')->toUpper()->split(" ")->sort();

Симпатично, не правда ли?
Инструкции по установке можно найти по ссылке выше, требуется PHP 5.4.
Имейте ввиду, что расширение находится в очень ранней альфа-версии, первый коммит датирован 24 января.
Радует, что автор расширения - контрибьютор PHP Никита Попов: есть вероятность, что подобное API когда-нибудь добавят в ядро интерпретатора.
Дальше я просто покажу как можно использовать эти новые возможности в разработке.

Допустим, у нас есть вот такая строка:

$string = 'lemon, orange, shit, banana, apple';

Задача:
  • заменить shit на candy;
  • убрать запятые;
  • перевести строку в верхний регистр;
  • разделить слова и поместить их в массив;
  • отсортировать этот массив по алфавиту.

Обычно это делается так:

$string = str_replace('shit', 'candy', $string);
$string = str_replace(',', '', $string);
$string = strtoupper($string);
$array = explode(' ', $string);
sort($array);

С помощью данного расширения задача решается в одну строчку:

$result = $string->replace('shit', 'candy')->remove(',')->toUpper()->split(" ")->sort();

Все понятно и красиво, только как такое провернуть?
1. Устанавливаем расширение scalar_objects;
2. Создадим классы-хендлеры для строк и массивов с нужными нам публичными методами:

class StringHandler {

    public function replace($from, $to) {
        return str_replace($from, $to, $this);
    }

    public function split($separator, $limit = PHP_INT_MAX) {
        return explode($separator, $this, $limit);
    }

    public function toUpper() {
        return strtoupper($this);
    }

    public function remove($what)
    {
    	return $this->replace($what, '');
    }
}

class ArrayHandler
{
    public function sort($flags = SORT_REGULAR)
    {
        sort($this, $flags);
        return $this;
    }

    public function count()
    {
        return count($this);
    }
}

3. Привяжем методы для строк и массивов к соответствующим классам:

register_primitive_type_handler('string', 'StringHandler');
register_primitive_type_handler('array', 'ArrayHandler');

После этого у строковых переменных появились методы replace, split, remove и так далее, у массивов - метод count(). Естественно, таких полезных методов можно добавить сколько угодно. Обратите внимание, что все они - публичные, а в качестве обрабатываемой строки(массива, числа) выступает $this. Подобным образом обработчики можно присвоить любому скалярному типу.
Также следует отметить, что конструкции вида:

"foobar"->trim();

вызывают Parse error, то есть методы можно вызывать пока только у переменных.
Также в репозитории есть пример реализации удобного API "запросов к строкам":

// содержит ли строка любую из указанных подстрок?
$str->contains(str\anyOf(['foo', 'bar', 'hello', 'world']));

// не заканчивается ли строка любым из этих значений?
$str->endsWith(str\noneOf(['.c', '.ho', '.lo']));

Очень наглядно и гораздо проще для запоминания, в отличии от strspn, strcspn, strpbrk.

Хочется верить, что разработчики PHP включат подобный функционал в следующие версии. Чуточку такого синтаксического сахара сделает разработку намного приятней, а разработчиков - счастливее.

Ссылка на проект: https://github.com/nikic/scalar_objects/

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 15.02.2013 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
ABBYY Lingvo x6 Европейская Домашняя версия, электронный ключ
VCL Subscription
Quest Software. Toad for Oracle Development Suite
Allround Automation Direct Oracle Access Standard license
Stimulsoft Reports.Ultimate Single License Includes one year subscription
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
СУБД Oracle "с нуля"
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Новые материалы
Новые программы для Windows
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100