2010-05-07 4 views
0

вот моя установка.Как вызвать метод других классов из класса?

class testA { 

    function doSomething() { 
    return something; 
    } 

} 

$classA = new testA(); 

class testB { 

$classA->doSomething(); 


} 

это не работает внутри этого класса .: $ classA-> doSomething(); как бы я это сделал?

+0

Почему вы вызываете другой метод в классе? –

+0

в реальном сценарии, что у меня есть класс testA, фактически является классом db, который включает в себя методы, которые требуют db и т. Д. второй класс - это класс корзины покупок и в классе корзины покупок я хотел сделать запрос, называя его первым классом, например $ db-> query ("...") – michael

ответ

0

Вы не можете вводить утверждения внутри классов. Оператор $classA->doSomething() должен быть внутри функции.

+0

вы можете объяснить, пожалуйста? – michael

+1

Я мог бы, но я предлагаю вам вместо этого выбрать хорошую книгу о PHP и объектно-ориентированном программировании. – Thomas

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 
Смежные вопросы