我正在使用WordPress短代码插件,因此我需要定义一个与add_action('wp_footer', 'fnc_name')
一起使用的函数。我已经将插件创建为具有公共函数和静态变量的类。
以下是我正在尝试做的一个示例(在本地函数$count
中使用tryToGetIt
):
class Test {
public static $count;
public function now () {
if (!$this::$count) {
$this::$count = 0;
}
$this::$count++;
$count = (string) $this::$count;
echo 'count should be '.$count;
function tryToGetIt() {
global $count;
echo 'count is '.$count;
}
tryToGetIt();
}
};
$test = new Test();
$test->now();
您可以在IDEONE上看到演示:http://ideone.com/JMGIFr
输出'计数应为1计数';
正如您所看到的,我已尝试使用$count
声明global
变量来使用外部函数中的变量,但这不起作用。我还尝试了$self = clone $this
并在本地函数中使用global $self
。
本地函数如何使用类的公共函数中的变量?
答案 0 :(得分:3)
global
无法做到这一点。 PHP有两个可变范围:全局和本地。
<?php
$foo = 'bar'; // global scope <-----------
\
function x() { |
$foo = 'baz'; // function local scope |
|
function y() { |
global $foo; // access global scope /
echo $foo;
}
y();
}
x(); // outputs 'bar'
你可以尝试一个闭包,例如
function foo() {
$foo = 'bar';
$baz = function() use (&$foo) { ... }
}
没有实用的方法来访问在函数调用链的某个中间级别定义的作用域。您只拥有本地/当前范围和全局范围。
答案 1 :(得分:2)
你可以这样做:
function tryToGetIt($count) {
echo 'count is '.$count;
}
tryToGetIt($count);
或者选择静态变量使用:
tryToGetIt()函数中的 Test::$count
。
答案 2 :(得分:1)
我尝试了这个代码,它可以运行
class Test {
public static $count;
public function now () {
if (!$this::$count) {
$this::$count = 0;
}
$this::$count++;
$count = (string) $this::$count;
echo 'count should be '.$count;
function tryToGetIt() {
echo 'count is '. Test::$count;
}
tryToGetIt();
}
};
$test = new Test();
$test->now();
但我不确定我理解你为什么要这样做。为什么不将tryToGetIt()作为Test中的私有函数而不是嵌套在now()中?