在字符串中标记子字符串而不更改其内容

时间:2012-01-14 13:57:31

标签: php string

假设我有一个名为F($input)的函数,并在一个文件中定义。

我不知道它的来源是什么,也就是我看不到文件内容。我只通过输入字符串调用函数F,函数返回另一个字符串,该字符串可能包含我的输入一次或多次。

我想要一种方法来识别返回值中的输入字符串(如果有的话)。

例如,假设函数F低于:

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

然后我致电F('bar')并返回foobarbar。 我现在不知道这是哪个子串,是我的输入参数bar。第一个bar还是第二个? 我正在寻找一种方法[例如]在发送到F之前标记我输入字符串的每个字符,并在F中对其进行每次操作,保持标记字符。最终F的返回值包括例如foo*bar*barbar可以区分。

注意:标记不得更改字符串内容。对于标记的$ input,($input=='bar')不得返回false。

1 个答案:

答案 0 :(得分:1)

您可以返回装饰器而不是字符串。该对象将包含附加标记,并允许您知道字符串位置是什么。如果重写__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');