2009-10-28 100 views
1
<?php 
class Conversor { 
    function toLowerFirst($word) { 
     $word = 'test'; 
     return $word; 
    } 
} 

class Test { 
    function test() { 
     $word = 'Test'; 
     $word = $this->conversor->toLowerFirst($word); 
     echo $word; 
    } 
} 

class Launcher { 
    function launch() { 
     $Test = new Test(); 
     $Test->conversor = new Conversor(); 
     $Test->test(); 
    } 
} 

$launcher = new Launcher(); 
$launcher->launch(); 
?> 

爲什麼不回顯'test'?調用成員函數X對Y上的非對象Z行

回答

5

這是因爲你的函數test()與類名相同 - 它看起來像一箇舊式的構造函數,所以當你做new Test()時,即在你設置conversor之前,它正在運行。

重命名功能或添加新的風格構造函數來測試:__construct()

+0

我以爲在功能和T類開始(測試爲測試一個構造處理)將要區分它們。 – 2009-10-28 15:55:11

+0

不幸的是:) – Greg 2009-10-28 16:22:23

1

,因爲呼叫$word = $this->conversor->toLowerFirst($word);返回一個錯誤,該函數toLowerFirst沒有在那個時候存在(你通過一個不存在的調用函數Conversor的實例)

將替換爲$word = Conversor::toLowerFirst($word);它將起作用。

編輯:__construct是一個更好的解決方案,因爲在2倍回聲我的建議結果..

+0

@Delirium tremens,這就是原因!尼斯回答MisticEarth。也就是說,也許你應該重新考慮程序的流程,因爲這可能會引發嚴格的標準警告。 – Frankie 2009-10-28 16:01:53

+0

在非簡化代碼中,對應於$ word = $ this-> conversor-> toLowerFirst($ word)的部分;在對應於$ Test-> conversor = new Conversor()的部分之前運行;運行。 – 2009-10-28 16:08:12

相關問題