使用sprintf重用格式字符串

时间:2014-01-05 05:24:38

标签: php class oop extend printf

我正在尝试扩展一个使用格式字符串的类来替换图像标记中的属性。格式字符串如下所示:

protected $_tag = '<img src="%1$s" alt="%2$s" />';

在此功能中使用:

public function getTag() {
    return sprintf($this->_tag, $this->_url, $this->_desc);
}

我扩展了这个类并覆盖了格式字符串以接受一些类:

protected $_tag = '<img src="%1$s" alt="%2$s" class="%3$s" />';

然后我覆盖getTag函数:

public function getTag() {
    $this->_tag = sprintf($this->_tag, '%1$s', '%2$s', $this->_classes);

    return parent::getTag();
}

有没有比这更好的方法来简单地替换格式字符串的一部分?我很难找到更优雅的东西。

编辑:我正在扩展的课程不是我自己的,所以我无法修改getTag

1 个答案:

答案 0 :(得分:1)

没有真正好的方法,但你可以稍微简化一下代码:

protected $_tag = '<img src="%%1$s" alt="%%2$s" class="%s" />';

前两个指令有一个额外的%使第一个sprintf()跳过它们,最后一个指令没有位置参数,只有%s

这将代码简化为:

$this->_tag = sprintf($this->_tag, $this->_classes);