2010-05-07 257 views
0

這是我的設置。如何從一個類中調用另一個類的方法?

class testA { 

    function doSomething() { 
    return something; 
    } 

} 

$classA = new testA(); 

class testB { 

$classA->doSomething(); 


} 

這不會在該類內部工作:$ classA-> doSomething(); 我該怎麼辦呢?

+0

爲什麼要在類範圍內調用其他方法? – 2010-05-07 07:00:29

+0

在我有類testA的實際腳本中,實際上是包含具有db需要的方法的db類,等等。第二類是購物車類,並且在購物車類中,我想通過第一類來調用它,例如$ db-> query(「...」) – michael 2010-05-07 07:07:35

回答

0

你不能像這樣在類中放置語句。語句$classA->doSomething()也必須在函數內部。

+0

請問您能解釋一下嗎? – michael 2010-05-07 07:07:51

+1

我可以,但我建議你拿起一本關於PHP和麪向對象編程的好書。 – Thomas 2010-05-07 07:21:21

2

有2種方式來做到這一點:聚合和組合

聚合是當傳遞給一個對象的引用。如果容器對象被銷燬,則包含的對象不是

class testB { 

    private $classA; 
    public function setClassA (testA $classA) { 
     $this->classA = $classA; 
    } 
    public function doStuffWithA() { 
     $this->classA->doSomething(); 
    } 

} 

$classA = new testA; 
$classB = new testB; 
// this is the aggregation 
$classB->setClassA($classA); 
$classB->doStuffWithA(); 
unset($classB); // classA still exists 

組合是對象被另一個對象擁有時。所以如果所有者被摧毀,兩者都將被銷燬。

class testB { 

    private $classA; 
    public function __construct() { 
     $this->classA = new testA; 
    } 
    public function doStuffWithA() { 
     $this->classA->doSomething(); 
    } 
} 
$classB = new testB; // new testA object is created 
$classB->doStuffWithA(); 
unset($classB); // both are destroyed 
相關問題