一个Liner将字符串前置或附加到另一个字符串

时间:2011-04-05 19:59:21

标签: php string

不是一个至关重要的问题,只是想知道是否有任何在线人员这样做。

function addString($text, $add, $type = 'prepend') {
   // oneliner here
   return $text;
}

$text = 'World';
addString($text, 'Hello ', 'prepend'); // returns 'Hello World'
addString($text, ' Hello', 'append'); // returns 'World Hello'

有什么想法吗? :)

5 个答案:

答案 0 :(得分:5)

如何使用ternary ?: operator

function addString($text, $add, $type = 'prepend') {
   return $type=='prepend' ? $add . $text : $text . $add;
}


注意:我实际上可能不会使用它 - 并保持经典的if / else:不是单行,不是很好阅读......但可能更容易理解;并且具有可理解的代码是非常重要的。


在评论后进行修改:如果您想确保$type'append''prepend',并且仍然想要一行,您可以使用以下内容:

function addString($text, $add, $type = 'prepend') {
   return ($type=='prepend' ? $add . $text : ($type=='append' ? $text . $add : ''));
}

但是你的代码将变得更难阅读 - 而且可能是时候选择比一行代码更长的东西了,而且更容易理解。


例如,为什么不是这样的:

function addString($text, $add, $type = 'prepend') {
    if ($type === 'prepend') {
        return $add . $text;
    } else if ($type === 'append') {
        return $text . $add;
    } else {
        // Do some kind of error-handling
        // like throwing an exception, for instance
    }
}

毕竟,行数对代码的执行方式几乎没有影响 - 同样重要的是,您的代码易于理解和维护。

答案 1 :(得分:1)

你熟悉吗?用PHP?

例如:

echo $text . "Hello!";

http://www.phpf1.com/tutorial/php-string-concatenation.html

答案 2 :(得分:0)

return $type == 'prepend' ? $add . $text : $text . $add;

答案 3 :(得分:0)

您可以使用ternary operator来实现此目的:

function addString($text, $add, $type = 'prepend') {
   return $type == 'prepend' ? $add . $text : $text . $add;
}

三元运算符实际上正在做的是检查第一个条件(?之前的条件,看它是否计算为真。如果是,它将语句的返回值设置为{{1如果不是,则使用最后一个块(在$add . $text之后)将返回值设置为:

正如PHP手册所说:

  

表达式(expr1)? (expr2):   (expr3)如果expr1则求值为expr2   计算结果为TRUE,expr3表示expr1   评估为FALSE。

因此,如果某人提供的内容不是“$text . $add”作为prepend参数的值,那么这将始终默认为第二个条件并追加。

答案 4 :(得分:0)

$ text =($ type ==='prepend')? $ add。$ text:$ text。$ add;