我正在编写一个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)。任何想法都非常感激。
答案 0 :(得分:3)
一些主要的事情。
sayHello
和sayGoodbye
函数,但未调用它们。sayHello
和sayGoodbye
引用变量$args1
和$args2
,但这些变量为undefined within their scope。这是一种使用最少的代码更改工作的方法。我更改了变量的名称,以强调sayHello
和sayGoodbye
中的变量与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);
}
另一件事:
与它看起来相反,sayHello
和sayGoodbye
与saySomething
的范围相同。它们不仅在该函数的范围内定义,即使它们是在那里写的。实际上它和写作一样:
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();
};