2012-01-07 45 views

回答

5

編號

在PHP中,您只能從一個類或一個類中擴展。正如你寫的兩個類都是相互獨立的,沒有信息在哪裏找到一個或另一個類。

但你要查找的內容大概是這樣的:

class A 
{ 
    function myFunction() {} 
} 

class B 
{ 
    private $a; 
    public function __construct(A $a) 
    { 
     $this->a = $a; 
    } 
    public function myFunction() 
    { 
     $this->a->myFunction(); 
    } 
} 
+0

謝謝!這很清楚。 – Jenny 2012-01-07 11:43:56

+0

不錯,非常清楚。 – Edward 2013-11-04 14:19:45

0

如果當前類是另一個類的子類,是的,可以。 parent對父類的引用。

php.net

<?php 
class A { 
    function example() { 
     echo "I am A::example() and provide basic functionality.<br />\n"; 
    } 
} 

class B extends A { 
    function example() { 
     echo "I am B::example() and provide additional functionality.<br />\n"; 
     parent::example(); 
    } 
} 

$b = new B; 

// This will call B::example(), which will in turn call A::example(). 
$b->example(); 
?> 
-1

,你可以在這裏做的最好的是從A類擴展B類

Class B extends Class A 

但是,你還可以:

class ClassA { 

    function do_something($args) { 
    // Do something 
    } 

} 

class ClassB { 

    function do_something_inclassA($args) { 
    classA::do_something($args); 
    } 

} 

重要:調用classa :: do_something();是靜態調用,換句話說,錯誤報告E_STRICT你會得到一個靜態的通知,警告,因爲功能do_something()不是靜態函數do_something()

此外,調用此函數靜態(即ClassA的:: do_something())意味着class a的函數不能引用$ this中的內容

+0

謹慎解釋減號投票? – 2012-01-07 11:25:47

+0

僅僅因爲某些東西似乎起作用並不意味着它應該被完成或鼓勵。因此警告。 – vascowhite 2012-01-07 11:25:52

+0

「最好的你可以做」=鼓勵,「但你也可以」=純粹的教育,謝謝Shiplu – Prof83 2012-01-07 11:28:43

1

如果有任何類方法已經在執行相同的操作,爲什麼還要打擾加入呢?

你不能這樣做。如果你希望同樣的工作流程最好的辦法是實例化另一個類並調用同樣的方法。這就是爲什麼我們使用OOP。

見的例子,

interface Fable() 
{ 
    public function f(); 
} 

class OtherClass implements Fable 
{ 
    public function f() 
    { 
     // job flow 
    } 
} 

class MyClass 
{ 
    private $fable; 
    public function __construct(Fable $f) 
    { 
     $this->fable = $f; 
    } 

    public function method1($args){ 
     return $this->fable->f($args); 
    } 
} 
+0

爲什麼減去投票? – 2012-01-07 11:38:29

+0

有人連續下了所有答案,不知道爲什麼,沒有留下評論。然而,在你的回答中,你正在'MyClass :: f()'中使用new運算符,這將使得它再次緊密耦合。取而代之的是在構造「MyClass」時注入它,這會更容易,而不會對它進行硬編碼,例如您稍後可以使用接口。不會使用'new'。 - 比較:http://stackoverflow.com/a/8769264/367456 – hakre 2012-01-07 11:49:18

+0

@hakre由於提問者想要相同的工作流程,我把它緊密聯繫在一起。最好使用它作爲包含該方法的參數* interface *。更新。 – 2012-01-07 12:00:04

相關問題