0

I'm trying to use myVar inside my of a method's function. I have already tried adding global but still nothing. I know this is probably basic but I can't seem to find it.

class myClass{
  
  public $myVar;

  public function myFunction() {
  
    function myInnerFunction() {
      //how do I use this variable here
      echo $this->myVar; 
    }
  }
}

Whenever I try using $this I get this error: 'Using $this when not in object context in...'

4

5 回答 5

3

你应该使用$this->myVar

请参阅PHP 文档 - 基础知识

<?php
class SimpleClass
{
    // property declaration
    public $var = 'a default value';

    // method declaration
    public function displayVar() {
        echo $this->var;
    }
}
?>

当从对象上下文中调用方法时,伪变量$this可用。$this 是对调用对象的引用(通常是方法所属的对象

更新:

在您的新代码示例中,myInnerFunction是一个嵌套函数myFunction,在调用该方法之前无法访问。一旦myFunction方法被调用,myInnerFunction它就成为global作用域的一部分。

也许这就是你正在寻找的:

 class myClass{

  public $myVar;

  public function myFunction() {

  }

  function myInnerFunction() {
    //how do I use this variable here
    echo $this->myVar; 
  }

}
于 2013-07-10T16:44:44.283 回答
1

像这样的内部函数myInnerFunction在范围内始终是全局的,即使它们是在类的成员函数内部定义的。有关另一个类似示例,请参见此问题

因此,对于 PHP,以下内容(几乎)是等价的:

class myClass{

  public $myVar;

  public function myFunction() {

    function myInnerFunction() {
      //how do I use this variable here
      echo $this->myVar; 
    }
  }
}

class myClass{

  public $myVar;

  public function myFunction() {

  }
}

function myInnerFunction() {
   //how do I use this variable here
   echo $this->myVar; 
}

希望第二个示例说明了为什么$this甚至不在myInnerFunction. 解决方案是将变量作为参数传递给函数。

于 2013-07-10T16:59:24.640 回答
0

当您需要每个实例都有自己的值时,上面的解决方案很好。如果您需要所有实例都具有相同的实例,则可以使用静态:

class myClass
{
  public static $myVar = "this is my var's value";

  public function myClass() {
      echo self::$myVar;
  }
}

new myClass();

看这里

于 2013-07-10T17:25:03.540 回答
0

将其作为参数传递给内部函数。

于 2013-07-10T16:57:17.103 回答
0

您可以使用ReflectionProperty

$prop = new ReflectionProperty("SimpleClass", 'var');

完整示例:

class myClass{

  public $myVar;

  public function myFunction() {

    function myInnerFunction() {
      //how do I use this variable here
      $prop = new ReflectionProperty("SimpleClass", 'myVar');
    }
  }
}
于 2013-07-10T16:59:37.560 回答