假设我有一个名为F($input)
的函数,并在一个文件中定义。
我不知道它的来源是什么,也就是我看不到文件内容。我只通过输入字符串调用函数F,函数返回另一个字符串,该字符串可能包含我的输入一次或多次。
我想要一种方法来识别返回值中的输入字符串(如果有的话)。
例如,假设函数F低于:function F($input){
return 'foo'.$input.'bar';
}
然后我致电F('bar')
并返回foobarbar
。
我现在不知道这是哪个子串,是我的输入参数bar
。第一个bar
还是第二个?
我正在寻找一种方法[例如]在发送到F之前标记我输入字符串的每个字符,并在F中对其进行每次操作,保持标记字符。最终F的返回值包括例如foo*bar*bar
,bar
可以区分。
注意:标记不得更改字符串内容。对于标记的$ input,($input=='bar')
不得返回false。
答案 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');