маркировка подстроки в строке без изменения ее содержимого - PullRequest
0 голосов
/ 14 января 2012

предположим, у меня есть функция с именем F($input), определенная в одном файле.

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

Я хочу, чтобы способ распознавать мою входную строку в возвращаемом значении, если оно есть.

например, предположим, что функция F ниже:

function F($input){
    return 'foo'.$input.'bar';
}

, и я вызываю F('bar'), и это возвращает foobarbar.теперь я не знаю, какая подстрока этого является моим входным параметром bar.первый bar или второй?я ищу способ [например] пометить каждый символ моей входной строки перед отправкой в ​​F и при каждой манипуляции с ним в пределах F сохранять отмеченные символы.в конечном итоге возвращаемое значение F состоит, например, из foo*bar*bar, в котором первый bar различим.

note: mark не должен изменять содержимое строки.то есть для помеченного $ input, ($input=='bar') не должно возвращать false.

1 Ответ

1 голос
/ 14 января 2012

Вы можете вернуть декоратор, а не строку.Объект будет содержать дополнительную разметку и позволит вам узнать, каковы позиции строки.Если вы переопределите __toString (), вы можете вернуть обычную строку, и большинство операций должны продолжать работать.

class SubstringPositionDecorator
{
    private $string;
    private $start;
    private $length;

    function __construct($string, $start, $length)
    {
        $this->string = $string;
        $this->start = $start;
        $this->length = $length;
    }

    function __toString()
    {
        return $this->string;
    }

    // Additional functions to access the substring information
}

function F($input)
{
    // Find string position...

    return new SubstringPositionDecorator('foo' . $input . 'bar', 3, 3);
}

$annotedString = F('bar');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...