Php 无法在函数类内调用全局变量

Php 无法在函数类内调用全局变量,php,class,global-variables,Php,Class,Global Variables,我是PHP5和类的新手,我正在努力使全局变量在函数中工作,为了更好地解释它,请查看下面的代码 class alpha{ #first function public function n_one(){ #variable $varr = 1; #inner function function n_two(){ global $varr; #Unable to get variable echo $varr;

我是PHP5和类的新手,我正在努力使全局变量在函数中工作,为了更好地解释它,请查看下面的代码

class alpha{

#first function
public function n_one(){

    #variable
    $varr = 1;

    #inner function
    function n_two(){
        global $varr;

        #Unable to get variable
        echo $varr;
        if($varr)
        {
            echo 'yessssss';
        }
    }

    echo $varr // Returns variable fine
}
}

我似乎在违反类和函数的工作方式方面做了一些错误的事情,不知道是什么。

移动“内部函数”和属性

class Alpha
{
    private $varr = 1;

    public function n_one()
    {
        // to access a property ore another method, do this
        $this->varr = $this->doSomething();

        return $this->varr; // Returns variable fine
    }

    private function doSomething()
    {
        // manipulate $this->varr here
    }
}
另外,永远不要从类内回显,而是返回变量并回显它

echo $alpha->n_one();

移动“内部函数”和属性

class Alpha
{
    private $varr = 1;

    public function n_one()
    {
        // to access a property ore another method, do this
        $this->varr = $this->doSomething();

        return $this->varr; // Returns variable fine
    }

    private function doSomething()
    {
        // manipulate $this->varr here
    }
}
另外,永远不要从类内回显,而是返回变量并回显它

echo $alpha->n_one();

global
表示访问全局范围内的变量,而不仅仅是包含范围内的变量。当您在内部函数中引用
$varr
时,它被视为
$GLOBALS['varr']

如果希望它引用与外部函数中相同的变量,则还需要在此声明变量
global
。否则,它是该函数中的局部变量,而内部函数访问全局变量

#first function
public function n_one(){
    global $varr;
    #variable
    $varr = 1;

    #inner function
    function n_two(){
        global $varr;

        #Unable to get variable
        echo $varr;
        if($varr)
        {
            echo 'yessssss';
        }
    }

    echo $varr // Returns variable fine
}
或者,您可以使用
use()
声明来声明应从外部范围继承的变量

    #inner function
    function n_two() use($varr) {
        global $varr;

        #Unable to get variable
        echo $varr;
        if($varr)
        {
            echo 'yessssss';
        }
    }

global
表示访问全局范围内的变量,而不仅仅是包含范围内的变量。当您在内部函数中引用
$varr
时,它被视为
$GLOBALS['varr']

如果希望它引用与外部函数中相同的变量,则还需要在此声明变量
global
。否则,它是该函数中的局部变量,而内部函数访问全局变量

#first function
public function n_one(){
    global $varr;
    #variable
    $varr = 1;

    #inner function
    function n_two(){
        global $varr;

        #Unable to get variable
        echo $varr;
        if($varr)
        {
            echo 'yessssss';
        }
    }

    echo $varr // Returns variable fine
}
或者,您可以使用
use()
声明来声明应从外部范围继承的变量

    #inner function
    function n_two() use($varr) {
        global $varr;

        #Unable to get variable
        echo $varr;
        if($varr)
        {
            echo 'yessssss';
        }
    }

内在功能?如果是闭包或类似的函数,请尝试
funition()use(){}
syntax-example#3.internal函数?如果是闭包或类似的,请尝试
funition()use(){}
syntax-example#3。谢谢!我现在更明白了,我知道嵌套函数不是最好的选择,我将不得不修改我的代码。谢谢!我现在更了解它了,我知道嵌套函数不是最好的选择,我将不得不修改我的代码。