通过一个函数将参数传递给另一个函数

时间:2017-05-16 21:15:51

标签: php wordpress function

我正在编写一个PHP Wordpress插件,我希望能够调用我在网站其他部分定义的功能(例如,在页面模板上)。

我希望能够将参数传递给我的函数,如下所示:

// Contained on Page Template to display content

$args1 = 'Hello';
$args2 = 'Goodbye';

saySomething( $args1, $args2);

// Contained within plugin file

function saySomething ($args1, $args2){

  //echo $args1 //Test Only
  //echo $args2 //Test Only

  function sayHello () {
      echo $args1;
  }

  function sayGoodbye () {
    echo $args2;
  }
}

我已经使用了' include_once'确保我可以在我的插件文件中调用函数。但是,出于某种原因,子功能(因为缺少一个更好的词!)似乎不起作用。我尝试了一些方法,包括在第一个函数中重新定义参数(例如$ newargs = $ args1)。任何想法都非常感激。

2 个答案:

答案 0 :(得分:3)

一些主要的事情。

  1. 您已定义sayHellosayGoodbye函数,但未调用它们。
  2. sayHellosayGoodbye引用变量$args1$args2,但这些变量为undefined within their scope
  3. 这是一种使用最少的代码更改工作的方法。我更改了变量的名称,以强调sayHellosayGoodbye中的变量与saySomething中的变量不同的事实。

    function saySomething ($args1, $args2){
    
      function sayHello ($x) {   // update the function signature so that it takes an argument
          echo $x;               // use the given parameter
      }
    
      function sayGoodbye ($y) {
        echo $y;
      }
    
      // call the functions
      sayHello($args1);
      sayGoodbye($args2);
    }
    

    另一件事:

    与它看起来相反,sayHellosayGoodbyesaySomething的范围相同。它们仅在该函数的范围内定义,即使它们是在那里写的。实际上它和写作一样:

    function saySomething ($args1, $args2){
      sayHello($args1);
      sayGoodbye($args2);
    }
    
    function sayHello ($x) {
      echo $x;
    }
    
    function sayGoodbye ($y) {
      echo $y;
    }
    

答案 1 :(得分:1)

要在PHP中使用内部函数,必须明确传递范围:

$args1 = 'Hello';
$args2 = 'Goodbye';

$saySomething = function() use ($args1, $args2) {
    $sayHello = function() use ($args1) {
        echo $args1;
    };
    $sayGoodbye = function() use ($args2) {
        echo $args2;
    };
    $sayHello();
    $sayGoodbye();
};

它不像JavaScript那样,范围自动传递:

let args1 = 'Hello';
let args2 = 'Goodbye';

let saySomething = () => {
    let sayHello = () => {
        console.log(args1);
    };
    let sayGoodbye = () => {
        console.log(args2);
    };
    sayHello();
    sayGoodbye();
};