(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
Антивирус ESET NOD32 SMALL Business Pack renewal for 5 user. Электронный ключ.
TeeChart Standard VCL/FMX 2 developer license
ABViewer Professional пользовательская
Inventory 9
Radmin 3.x - Стандартная лицензия 1 компьютер
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
CASE-технологии
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
СУБД Oracle "с нуля"
Новые материалы
Компьютерная библиотека: книги, статьи, полезные ссылки
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
Обсуждения в форумах
Детейлинг центр (1)
Ездили в отпуск в Москву, сломалась выхлопная система - отремонтировали здесь:...
 
Ставки на спорт для новичков (2)
Если читаете эту статью https://futbolstavkiprognozy.ru/stavki-dlya-novichkov/, то наверняка...
 
Реклама (4)
Добрый день. Какое продвижение сделать собственному бизнесу?
 
Рабочее зеркало БК Мостбет - как найти? (1)
Узнайте обо всех особенностях по поиску рабочего зеркала БК Мостбет из нашей статьи...
 
Помощь по MS Access (337)
Доброе время суток. Случайно оказался на этом сайте, искал статьи по OLAP. Вижу, что...
 
 
 



    
rambler's top100 Rambler's Top100