我可以在php中为传递的函数参数添加变量值吗?

时间:2012-06-13 16:04:14

标签: php

我有以下变量:

$argument = 'blue widget';

我传递了以下函数:

widgets($argument);

小部件功能中有两个变量:

$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传递给函数
  • 价格在功能
  • 内可用

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

6 个答案:

答案 0 :(得分: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
    
  3. 以下是一个示例:http://codepad.org/Tme2Blu8

答案 1 :(得分:3)

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

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

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

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

在此处查看:[{3}}

答案 2 :(得分: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);
}

答案 3 :(得分: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

答案 4 :(得分:1)

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

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

function foo($var){
    global $global_var;

    $global_var = 'some modifications'.$var;
}

答案 5 :(得分:-1)

考虑更改参数,然后从widget函数返回它,而不是简单地在函数内更改它。对于阅读代码的人来说,更清楚的是$ argument被修改而不必阅读该函数。

$argument = widget($argument);

function widget($argument) {
    // get $price;
    return $argument . $price;
}