ФорумПрограммированиеPHP для идиотов → snippet: Строка со свойствами объекта по шаблону

snippet: Строка со свойствами объекта по шаблону

  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 12 июля 2010 г. 16:59, спустя 2 дня 8 часов 35 минут


    <?php

    error_reporting(-1);

    class Replacer
    {

    public function __construct(array $args = NULL)
    {
    if (!empty($args)) {
    foreach ($args as $name => $value) {
    $this->$name = $value;
    }
    }
    }

    public function buildString($text)
    {
    $parts = preg_split('/(\{\$.+\})/U', $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
    $ret = '';
    foreach ($parts as $sub) {
    if (substr($sub, 0, 2) != '{$' || substr($sub, -1, 1) != '}') {
    $ret .= $sub;
    } else {
    // something like {$name}
    $sub = substr($sub, 2, -1);
    if (($p = strpos($sub, ':')) === FALSE) {
    $ret .= $this->$sub;
    } else {
    // something like {$name:6,3}
    list($from, $to) = explode(',', substr($sub, $p + 1));
    $sub = substr($sub, 0, $p);
    $ret .= substr($this->$sub, intval($from), intval($to));
    }
    }
    }
    return $ret;
    }
    }

    $r1 = new Replacer(array(
    'uploadDir' => './upload/',
    'rand9'     => sprintf('%03d%03d%03d', mt_rand(0, 999), mt_rand(0, 999), mt_rand(0, 999))));

    echo $r1->buildString('{$uploadDir}{$rand9:0,3}/{$rand9:3,3}/{$rand9:6,3}.dat') . "<br/>\n";

    $r2 = new Replacer(array(
    'avatarDir' => './img/avatars/',
    'userId'    => 4021));

    echo $r2->buildString('{$avatarDir}{$userId}.jpg') . "<br/>\n";


    выводит

    ./upload/362/246/480.dat
    ./img/avatars/4021.jpg
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 10 июля 2010 г. 7:58, спустя 14 часов 58 минут 29 секунд

    забавно
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 10 июля 2010 г. 8:10, спустя 12 минут 10 секунд


    забавно
    но я не вижу смысла …
    Сапожник без сапог
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 10 июля 2010 г. 8:16, спустя 5 минут 58 секунд

    в виде отдельного класса - да, нахуй нужно).

    ща темку создам
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 10 июля 2010 г. 8:19, спустя 2 минуты 32 секунды

    кто сказал "в виде отдельного класса?". это фрагмент бля! вам что, сразу всё вывалить?
    придется рассказывать издалека. жил был царь … нет не то.
    есть некая CMS, требуется добавить upload/download. файлы желательно хранить с искусственными именами и раскладывать по под-папочкам, чтобы не было слишком много в одной. правила для этого раскладывания я решил сделать конфигурируемыми - в виде одной строки. все необходимые параметры у меня уже есть как свойства FileStorage. осталось подклеить их в строку.
    всё.
    Спустя 53 сек.
    [size=30]2100[/size]
    ιιlllιlllι унц-унц
  • Абырвалг

    Сообщения: 6476 Репутация: N Группа: Джедаи

    Spritz 10 июля 2010 г. 8:24, спустя 5 минут 50 секунд

    не кипятись, ща поясню в соседней теме

Пожалуйста, авторизуйтесь, чтобы написать комментарий!