在方法的函数中使用Class属性

时间:2013-07-10 16:43:37

标签: php oop

我正在尝试在方法函数中使用myVar。我已经尝试添加global,但仍然没有。我知道这可能是基本的,但我似乎无法找到它。

class myClass{

  public $myVar;

  public function myFunction() {

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

每当我尝试使用$this时,我都会收到此错误:'在不在对象上下文中使用$ this'

我的代码

编辑错误

5 个答案:

答案 0 :(得分:3)

您应该使用$this->myVar

请参阅PHP Documentation - The Basics

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

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

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

<强> 更新

在新的代码示例中,myInnerFunctionnested function,在调用myFunction方法之前无法访问。调用myFunction方法后,myInnerFunction将成为global范围的一部分。

也许这就是你要找的东西:

 class myClass{

  public $myVar;

  public function myFunction() {

  }

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

}

答案 1 :(得分:1)

myInnerFunction等内部函数在范围内始终是全局函数,即使它们是在类的成员函数内定义的。有关其他类似示例,请参阅this question

因此,对于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的范围内。解决方案只是将变量作为参数传递给函数。

答案 2 :(得分:0)

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

答案 3 :(得分: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');
    }
  }
}

答案 4 :(得分:0)

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

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

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

new myClass();

see here

相关问题