我不明白这是怎么回事。我需要从Func2调用Func1,并在对象内部给出Func1的参数。
class MyClass {
function Func1($a) {
return $a;
}
function Func2() {
echo $this->Func1($a);
}
}
$c = new MyClass();
$c->Func1('parametr'); // prints: 1
$c->Func2();
答案 0 :(得分:2)
如何将参数设置为类变量(属性)?
class MyClass {
private $a;
function Func1($a) {
$this->a = $a;
return $a;
}
function Func2() {
echo $this->Func1($this->a);
}
}
这会在您第一次调用Func1时设置参数。然后每次调用Func2时,它都会使用该参数。您也可以跳过这样的参数:
class MyClass {
private $a;
function Func1($a = null) {
if ($a === null) {
return $this->a;
} else {
$this->a = $a;
return $a;
}
}
function Func2() {
echo $this->Func1();
}
}
即如果你在没有任何参数的情况下调用func1,它会使用存储的变量(property),否则它会使用给定的参数。这可以根据您的具体需要以各种方式使用。
答案 1 :(得分:0)
指示:
echo $ this-> Func1($ a);
错误:变量$ a超出了Func2的范围。 $ a是Func1的参数,因此它只是Func1的范围。
答案 2 :(得分:0)
您应该阅读有关PHP http://php.net/manual/en/language.variables.scope.php的变量范围的更多信息
快速一瞥:
1)你可以拥有全局变量。要访问这些,请在需要访问该功能的函数中使用关键字global
2)您可以拥有局部变量,仅在函数范围内可用
3)您可以传递对变量的引用,以便一个范围的变量可供其他函数/范围使用
4)你可以拥有不同类型的对象的内部变量(私有,公共,受保护,静态)
我建议你很熟悉这些东西。
至于你的代码,问题很明显。在Func2
中,$a
是局部变量,因此在传递给$this->Func1($a)
时,它是未定义的。正如您的示例代码所示,您可能希望引入类属性private $a
,然后使用它。 e.g:
class X {
private $a;
function set($val){
$this->a = $val;
}
function get(){
return $this->a;
}
function doSomethingWithA(){
$this->set($this->get() * 2);
}
}