2

我有以下变量:

$argument = 'blue widget';

我传入以下函数:

widgets($argument);

widgets 函数中有两个变量:

$price = '5';
$demand ='low';

我的问题是如何执行以下操作:

 $argument = 'blue widget'.$price.' a bunch of other text';
 widgets($argument);
 //now have function output argument with the $price variable inserted where I wanted.
  • 我不想将 $price 传递给函数
  • 价格在函数内部可用

有什么合理的方法可以做到这一点,还是我需要重新考虑我的设计?

4

6 回答 6

5

在我的脑海中,有两种方法可以做到这一点:

  1. 传入两个参数

    widget($initText, $finalText) {
        echo $initText . $price . $finalText;
    }
    
  2. 使用占位符

    $placeholder = "blue widget {price} a bunch of other text";   
    widget($placeholder);
    
    function widget($placeholder) {
         echo str_replace('{price}',$price,$placeholder);
    }
    // within the function, use str_replace
    

这是一个例子:http ://codepad.org/Tme2Blu8

于 2012-06-13T16:07:58.327 回答
3

使用某种占位符,然后在您的函数中替换它:

widgets('blue widget ##price## a bunch of other text');

function widgets($argument) {
    $price = '5';
    $demand = 'low';

    $argument = str_replace('##price##', $price, $argument);
}

在这里查看它的实际操作:http: //viper-7.com/zlXXkN

于 2012-06-13T16:09:03.273 回答
2

为您的变量创建一个占位符,如下所示:

$argument = 'blue widget :price a bunch of other text';

在您的widget()函数中,使用字典数组并str_replace()获取结果字符串:

function widgets($argument) {
  $dict = array(
    ':price'  => '20',
    ':demand' => 'low',
  );
  $argument = str_replace(array_keys($dict), array_values($dict), $argument);
}
于 2012-06-13T16:10:23.670 回答
2

我会鼓励preg_replace_callback。通过使用这种方法,我们可以轻松地使用捕获的值作为查找来确定它们的替换应该是什么。如果我们遇到无效的密钥,可能是拼写错误的原因,我们也可以对此做出回应。

// This will be called for every match ( $m represents the match )
function replacer ( $m ) {
    // Construct our array of replacements
    $data = array( "price" => 5, "demand" => "low" );
    // Return the proper value, or indicate key was invalid
    return isset( $data[ $m[1] ] ) ? $data[ $m[1] ] : "{invalid key}" ;
}

// Our main widget function which takes a string with placeholders
function widget ( $arguments ) {
    // Performs a lookup on anything between { and }
    echo preg_replace_callback( "/{(.+?)}/", 'replacer', $arguments );
}

// The price is 5 and {invalid key} demand is low.
widget( "The price is {price} and {nothing} demand is {demand}." );

演示:http ://codepad.org/9HvmQA6T

于 2012-06-13T16:20:18.563 回答
1

是的你可以。在你的函数中使用全局。

$global_var = 'a';
foo($global_var);

function foo($var){
    global $global_var;

    $global_var = 'some modifications'.$var;
}
于 2012-06-13T16:06:53.057 回答
-1

考虑更改参数,然后从您的小部件函数中返回它,而不是简单地在函数中更改它。阅读您的代码的人会更清楚地看到 $argument 正在被修改,而无需阅读该函数。

$argument = widget($argument);

function widget($argument) {
    // get $price;
    return $argument . $price;
}
于 2012-06-13T16:08:53.990 回答