如何在本地函数中使用类函数变量

时间:2014-11-27 20:17:23

标签: php wordpress

我正在使用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

本地函数如何使用类的公共函数中的变量?

3 个答案:

答案 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()中?