2011-08-17 55 views
2

如果我有兩個類A,B和一個不擴展另一個,它們是分開的,但都加載到腳本中,我仍然可以從B引用函數A?從第二級調用第一級沒有延伸的函數?

class A { 
    function one() { 
     echo "Class A"; 
    } 
} 

class B { 
    function two() { 
     echo "Class B"; 
     A::one(); 
    } 
} 


$a new A; 
$b = new B; 

$b->two(); 
+0

[使用A類對象的非相關類B的A類中的訪問函數的可能重複](http://stackoverflow.com/questions/7101204/access-function-in-class-a-from-non- related-class-b-using-object-of-a- – hakre

+0

你不會犯錯嘗試使用類來設置名稱空間的方式,對嗎?因爲這是一個非常糟糕的想法。 – staticsan

回答

0

你可以定義一個爲靜態,但爲什麼你會做這樣的事情?

+0

我需要把這個放在每一個20的文件中,所以我寧願把「$ b-> two();」而不是5行長的整個事情。 – Poemm

1

您可以像這樣定義它。

class A { 
    public static function one() { 
     echo "Class A"; 
    } 
} 

class B { 
    function two() { 
     echo "Class B"; 
     A::one(); 
    } 
} 


$a new A; 
$b = new B; 

$b->two(); 
+0

這對我有用,但現在這個函數有$ this這個函數,並且因爲靜態它不再工作,有沒有方法可以在沒有$ this的情況下調用同一個類中的變量? – Poemm

+0

其實它的名言「調用一個成員函數one()在一個非對象在」 – Poemm

2

面對它,是的,你可以做到這一點。但是,A類中的函數one()需要聲明爲static,以使您的呼叫符號有效。 (這使得它類方法

另一種選擇,在你的代碼的最後行建議,是實例$b調用函數實例$a。這些功能被稱爲實例方法,並且是您通常如何與對象進行交互的方式。要訪問這些方法,它們必須聲明爲public。聲明爲private的方法只能由該類中的其他方法調用。

有幾種方法可以在代碼中調用實例方法。這些是明顯的兩個,你可以通過$a作爲參數傳遞給函數,或者你可以在你的方法中創建一個A類的實例。

你究竟在努力實現什麼?