【问题标题】:Reuse format string with sprintf使用 sprintf 重用格式字符串
【发布时间】:2014-01-22 16:53:06
【问题描述】:

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

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

【问题讨论】:

    标签: php class oop extend printf


    【解决方案1】:

    没有真正好的方法可以做到这一点,但您可以稍微简化一下代码:

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

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

    这将代码简化为:

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

    【讨论】:

    • 我已经测试过了,所以你可能把位置参数留在里面了。
    • 糟糕,我必须拥有。现在可以使用了!
    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 1970-01-01
    • 2014-09-05
    • 2010-09-25
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多