【问题标题】:PHP call variable of outside function from inside functonPHP从内部函数调用外部函数变量
【发布时间】:2013-01-23 08:13:35
【问题描述】:

我有一个如何调用变量的问题。

在Js中,如果我在B()里面写$A = $this->A,我可以通过$A里面C()到达$this->A;但在 PHP 中似乎这种方式行不通。

请建议一种可以在 C() 内部读取 $this-A 而无需给出函数变量的方法。

class X {

    function B(){
        function C(){
           $this->A;  // Can not call A here
           $A; // No work either

        }
        $A = $this->A; // 

        $this->A; // Can call A here
    }

    private $A;
}

这里是Global $A Get variables from the outside, inside a function in PHP

但是,如果是全局的,这里的全局是指整个脚本不在类内。

非常感谢您的建议。

【问题讨论】:

    标签: php function variables


    【解决方案1】:

    你不能在函数中定义函数,避免它,这很糟糕!该功能将不限于范围。函数始终是全局的。

    虽然它会在第一次运行时工作,但此类代码的执行只会定义函数(之前的调用将不可用),并且在下一次调用时会崩溃并出现“重新定义的函数错误”。

    知道了这一点,您的代码所做的就是定义一个实际上在类之外的全局函数“C”,因此无法访问私有属性。

    【讨论】:

    【解决方案2】:

    正如 Sven 所说,函数内的函数很糟糕,但是忽略了您也可以这样做以在函数内公开非函数范围的变量

    class X {
    
        function B(){
            $A = $this->A; //
            function C(){
               global $A; // No work either
            }
            $this->A; // Can call A here
        }
    
        private $A;
    }
    

    从评论中编辑:

    class X { 
    
        public $inputvar; 
        public $outputvar; 
    
        public function B($changeinput) { 
            $this->inputvar = $changeinput; 
        } 
    
        public function C($secondinput) { 
            $this->outputvar = $this->inputvar." == ".$secondinput; 
        } 
    
        public function return_var() { 
            return $this->outputvar; 
        }
    }
    
    $testclass = new X(); 
    
    $testclass->B("test input"); 
    $testclass->C("second input"); 
    $testclass->inputvar = "BLAAH"; 
    
    echo $testclass->return_var();
    

    【讨论】:

    • 非常感谢,请问C()里面的全局$A,这个全局只代表B()里面吗?整个页面?? (假设类外是否有 $A
    • 在 C 中添加全局 $A 将允许它访问任何被指定为全局变量的名为 $A 的变量。即C 之外的一个不是私有变量的变量。所以它应该能够从主类中读取 $A FROM B() 。例如class X { public $test; function C() { global $test; } }
    • @Dave:你想说什么?您的代码告诉我:“它不起作用”。你的介绍另有说明。顺便说一句:您的代码不会访问 B() 中的 $A,因此它不起作用。
    • inputvar = $changeinput; } 函数 C($secondinput){ $this->outputvar = $this->inputvar." == ".$secondinput; } function return_var() { return $this->outputvar; } } $testclass= 新 X(); $testclass->B("测试输入"); $testclass->C("第二个输入"); $testclass->inputvar = "BLAAH";回声 $testclass->return_var(); ?>
    • 我还是不明白你想说什么。
    猜你喜欢
    • 2012-07-14
    • 2013-11-14
    • 2018-06-12
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    相关资源
    最近更新 更多