[英]Calling a function within the function inside the class in php
我不明白這是怎么回事。 我需要從Func2調用Func1,並在對象內部給出Func1的parametr。
class MyClass {
function Func1($a) {
return $a;
}
function Func2() {
echo $this->Func1($a);
}
}
$c = new MyClass();
$c->Func1('parametr'); // prints: 1
$c->Func2();
將參數設置為類變量(屬性)怎么樣?
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,它使用存儲的變量(屬性),否則它使用給定的參數。 這可以根據您的具體需要以各種方式使用。
說明:
echo $ this-> Func1($ a);
是錯誤的:變量$ a超出了Func2的范圍。 $ a是Func1的參數,因此只是在Func1的范圍內。
您應該在PHP http://php.net/manual/en/language.variables.scope.php上閱讀有關變量范圍的更多信息。
快速一瞥:
1)你可以擁有全局變量。 要訪問它們,請在需要訪問它的函數中使用關鍵字global
2)您可以擁有局部變量,僅在函數范圍內可用
3)您可以傳遞對變量的引用,以便一個范圍的變量可供其他函數/范圍訪問
4)你可以擁有不同類型的對象的內部變量(私有,公共,受保護,靜態)
我建議你真正熟悉這些東西。
至於你的代碼,問題很明顯。 在Func2
, $a
是局部變量,因此當傳遞給$this->Func1($a)
,它是未定義的。 正如您的示例代碼所示,您可能希望引入類屬性private $a
,然后使用它。 例如:
class X {
private $a;
function set($val){
$this->a = $val;
}
function get(){
return $this->a;
}
function doSomethingWithA(){
$this->set($this->get() * 2);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.