我正在尝试在方法函数中使用myVar
。我已经尝试添加global
,但仍然没有。我知道这可能是基本的,但我似乎无法找到它。
class myClass{
public $myVar;
public function myFunction() {
function myInnerFunction() {
//how do I use this variable here
echo $this->myVar;
}
}
}
每当我尝试使用$this
时,我都会收到此错误:'在不在对象上下文中使用$ this'
编辑错误
答案 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是对调用对象的引用 (通常是方法所属的对象
<强> 更新 强>
在新的代码示例中,myInnerFunction
是nested 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();