2013-11-30 3 views
-1

У меня есть этот класс контроллера.Функция вызова через классы через контроллер

<?php 

class controller{ 

function __construct(){ 
    $this->db  = new db; 
    $this->output = new output; 
} 

} 

class db{ 
    function get(){ 
     return 'value from db'; 
    } 

} 

class output{ 
    function view(){ 
     print $controller->$db->get(); 
    } 

} 
$c = new controller; 
$c->output->view(); 
?> 

Конечно, это не работает, но я думаю, что он перешел через идею того, что я пытаюсь сделать. Как мне это сделать?

+0

Вы установили расширение php? – hek2mgl

+0

Я думаю, вам нужно посмотреть на шаблоны проектирования, в частности на MVC. Это способ, который позволяет отображать контент в представлении, из источника данных, через контроллер. –

+0

Можете ли вы дать мне краткое объяснение, как это сделать или хороший учебник об этом? – user3053216

ответ

1
<?php 

class controller{ 

function control($db, $output){ 
    $data = $db->get(); 
    $output->view($data); 
} 

} 

class db{ 
    function get(){ 
     return 'value from db'; 
    } 

} 

class output{ 
    function view($data){ 
     print $data; 
    } 

} 
$db = new db; 
$output = new output; 
$c = new controller; 
$c->control($db, $output); 
?> 
+0

Спасибо за ваш ответ. Это, однако, было просто примером. Количество «подфункций» определяется по функции контроллера, поэтому это не сработает. – user3053216

+0

@ user3053216 Я не совсем понимаю, что вы имеете в виду. Конечно, у вас будет больше моделей и просмотров. Для каждой страницы у вас должен быть отдельный локализованный контроллер, который расширяет основной контроллер. –

0

Здесь вы можете использовать PHP5 Type Hinting. Вы можете прочитать больше here

Код:

<?php 

class controller 
{ 
    function __construct() 
    { 
     $this->db   = new db; 
     $this->output = new output($this->db); 
    } 

} 
class db 
{ 
    function get() 
    { 
     return 'value from db'; 
    } 
} 

class output 
{ 
    private $_db; 

    public function __construct(db $get) 
    { 
     $this->_db = $get->get(); 
    } 

    public function view() { 
     return $this->_db; 
    } 
} 

$c = new controller(); 
echo $c->output->view(); 

В этом примере:

Мы типа намекая класс db проходящее в $this->db экземпляра объекта к controller класса __construct магическим способом.

А потом на output классе мы проходим фактическое имя класса db с конкретизированными переменным и получить метод get() и сохранение значения в частную собственность $db_ и возвращение к view() методе.

Надеюсь, это поможет!

Смежные вопросы