2010-09-08 4 views
0

В CodeIgniter мы используем вызов метода, как этотCalligniter как методы вызова?

$this->load->view(); 

Я хочу знать, что это «нагрузка» точно? Это функция или что? И почему после него нет двух круглых скобок? Я хочу сделать что-то подобное в своем коде, так как я могу это сделать?

+0

Обратите внимание, что() - круглые скобки, а фигурные скобки - {}. –

+0

@ Пол: О, спасибо. Я исправил, что – Lattice

ответ

2

load, объект на объекте $this, является экземпляром класса CI_Loader. Он имеет метод под названием view().

CodeIgniter инстанцирует Loader объект в довольно тупым способом, но вы можете себе это следующим образом:

class Loader { 
    function view($view_name) { 
    echo "View '$view_name' loaded!"; 
    } 
} 

class FooController{ 
    public $load; 

    function __construct() { 
    $this->load = new Loader(); 
    } 
} 

$foo = new FooController(); 
$foo->load->view("bar"); // => "View 'bar' loaded!" 
/*^^ ^
    | |  | 
    | |  +--- view() is a method on the Loader object assigned to $foo's 'load' property 
    | | 
    | +--------- 'load' is a property on $foo, to which we've assigned an object of class Loader 
    | 
    +-------------- $foo is an instance of class FooController 
*/ 
+0

Можем ли мы сделать экземпляр класса в определении другого класса? – Lattice

+0

Да. Определения классов глобальны, поэтому, когда PHP знает о классе, мы можем создавать его экземпляры где угодно. –

0

Вы бы сделать что-то вроде этого:

class Controller { 
    public $load = new Loader(); 
    //... 
} 

Затем, вы можете получить доступ к свойствам и методы на $load следующим образом:

$controller = new Controller(); 
$controller->load->foo(); 

В CI, $load является просто свойством класса CI_Controller и экземпляром класса CI_Loader.

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