2013-04-23 20 views
6

Poznaję OOP i bardzo mylić używanie klas dla siebie.PHP zawiera klasę w innej klasie

Mam ogółem 3 klasy

//CMS System class 
class cont_output extends cont_stacks 
{ 
    //all methods to render the output 
} 


//CMS System class 
class process 
{ 
    //all process with system and db 
} 


// My own class to extends the system like plugin 
class template_functions 
{ 
    //here I am using all template functions 
    //where some of used db query 
} 

Teraz chcę wykorzystać moje własne klasy template_functions withing obu klas systemowych. Ale bardzo zdezorientowany, jak z niego korzystać. Proszę, pomóż mi to zrozumieć.

EDYCJA: Przykro mi, czciciele zapomniałem wspomnieć o mojej własnej klasie w innym pliku PHP.

+0

Jestem mylić o co to zamieszanie ... – raidenace

+0

brzmi jak chcesz wielokrotnego dziedziczenia, tak że cont_output rozciąga się zarówno cont_stacks I template_functions? ponieważ w przeciwnym razie nie ma powodu, dla którego klasa nr 1 nie mogłaby wywołać metody statycznej lub utworzyć egzemplarza klasy 2 w sobie. –

+0

@MarcB Jest to rodzaj, ale zależy tylko, jak mogę korzystać z mojej własnej klasy dostępnej w obu klasach. –

Odpowiedz

10

Po pierwsze, upewnij się, że include plik klasy przed użyciem go:

include_once 'path/to/tpl_functions.php'; 

Należy to zrobić albo w index.php lub na szczycie klasy, która używa tpl_function. Zwróć także uwagę na możliwość wykonania następujących klas: autoloading:

Od PHP5 musisz mieć możliwość automatycznego ładowania klas. Oznacza to, że rejestrujesz funkcję przechwytującą, która jest wywoływana za każdym razem, gdy próbujesz użyć klasy, której plik kodu nie został jeszcze zawarty. Nie musisz mieć instrukcji include_once w każdym pliku klasy. Nadchodzi przykład:

index.php lub dowolnej aplikacji punkt wejścia:

spl_autoload_register('autoloader'); 

function autoloader($classname) { 
    include_once 'path/to/class.files/' . $classname . '.php'; 
} 

Od teraz można uzyskać dostęp do klas bez martwić się o tym już pliki kodu. Spróbuj go:

$process = new process(); 

Wiedząc o tym, istnieje kilka sposobów, w jaki sposób można użyć klasy template_functions


Wystarczy używać go:

można otworzyć klasę w dowolna część kodu, jeśli utworzysz instancję:

class process 
{ 
    //all process with system and db 

    public function doSomethging() { 
     // create instance and use it 
     $tplFunctions = new template_functions(); 
     $tplFunctions->doSomethingElse(); 
    } 
} 

członkowie przykład:

Weź klasę procesowego na przykład. Aby uczynić template_functions dostępny wewnątrz klasy process, należy utworzyć element instancji i zainicjować go gdzieś, gdzie jest to potrzebne, konstruktor wydaje się być dobrym miejscem:

//CMS System class 
class process 
{ 
    //all process with system and db 

    // declare instance var 
    protected tplFunctions; 

    public function __construct() { 
     $this->tplFunctions = new template_functions; 
    } 

    // use the member : 

    public function doSomething() { 
     $this->tplFunctions->doSomething(); 
    } 


    public function doSomethingElse() { 
     $this->tplFunctions->doSomethingElse(); 
    } 
} 
+0

Dzięki za szybką reakcję .. tylko kilka zapytań ... chroniona jest zmienna, więc czy wymaga '$'? i zapomniałem wspomnieć o mojej klasie w osobnym pliku php –

+0

Więc gdzie mam dołączyć mój plik? –

+0

Sprawdź moją aktualizację – hek2mgl

0

można rozszerzyć klasę template_functions, wtedy może korzystać ze wszystkich funkcji.

class cont_output extends cont_stacks //cont_stacks has to extend template_functions 
{ 
    public function test() { 
     $this->render(); 
    } 
} 


class process extends template_functions 
{ 
    public function test() { 
     $this->render(); 
    } 
} 


class template_functions 
{ 
    public function render() { 
     echo "Works!"; 
    } 
} 
+0

Ale co z "procesem klasy"? przepraszam, ale próbuję zrozumieć –

Powiązane problemy