2010-02-18 193 views
1

如何從函數a中訪問函數bPHP - 從另一個類訪問函數

這是我到目前爲止,我遇到了以下錯誤:PHP致命錯誤:調用未定義的方法:: B()

class test { 
function a($x) { 
    switch($x) 
    { 
    case 'a'://Do something unrelated to class test2 
     break; 
    case 'b': 
     $this->b();  
     break; 
    } 
} 
} 

class test2 extends test { 
function b() { 
    echo 'This is what I need to access'; 
} 
} 

$example=new test(); 
$example2=new test2(); 
$example->a(b); 

的背景信息 - 功能的一個開關對於通過AJAX發送的請求。根據請求,它調用一個函數來添加記錄到數據庫,編輯它等。

謝謝!

+0

很難寫出一個很容易理解的答案,因爲你重複使用你的名字很多。我必須區分類測試和對象測試,並且還有一個稱爲「b」的神祕參數傳遞給函數「a」,同時還有一個稱爲「b」的函數。爲了清楚起見,您應該在示例中使用更多描述性和唯一名稱。 – Tesserex 2010-02-18 15:57:44

+0

好點 - 謝謝! – Matt 2010-02-18 16:00:34

+0

感謝您的快速解答。 – Matt 2010-02-18 16:09:19

回答

4

你必須在基類測試中定義一個抽象方法b(這使得這個類是抽象的,所以你不能有它的實例)來調用這個方法,o此外,函數b在這個類中沒有定義,只有在它的子類中基類什麼都不知道(並且不需要知道任何東西)。

閱讀繼承。

另一件事:a和b沒有定義,使用引號。 (但這可能只是懶惰在你的例子)

+0

是的,我留下了引用這個例子。感謝你的回答! – Matt 2010-02-18 16:05:52

1

你不能這樣做。

+0

所以唯一的方法就是調用$ test2-> b(); ? – Matt 2010-02-18 15:55:08

+1

Exacly - 只有這樣。 – hsz 2010-02-18 15:56:10

+1

$ test2是一個'測試',並有權訪問方法a()和b(); $ test1是'測試',但不是'test2',所以只能訪問方法a() – thetaiko 2010-02-18 15:57:58

3

您不能,$ test不是test2類的實例,所以它沒有方法b。如果你調用$ test2-> a(b),只要你在class test中定義b(),它也可以工作。這樣,類test2中的b的定義將覆蓋它。