簡體   English   中英

在php中調用類中的函數內的函數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM