2013-04-23 3 views
6

J'apprends la POO et très confuse d'utiliser des classes les uns pour les autres.PHP inclure la classe dans l'autre classe

J'ai 3 au total des cours

//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 
} 

Maintenant, je veux utiliser mes propres template_functions de classe withing les deux classes de système. Mais très confus comment l'utiliser. S'il vous plaît aidez-moi à comprendre cela.

EDIT: Je suis désolé champs j'ai oublié de mentionner que ma propre classe dans un fichier PHP différent.

+0

Je suis confus au sujet de ce qui est votre confusion ... – raidenace

+0

semble que vous voulez l'héritage multiple, de sorte que cont_output étend à la fois cont_stacks ET template_functions? car sinon, il n'y a aucune raison pour que la classe n ° 1 ne puisse pas appeler une méthode statique, ou instancier une copie de la classe n ° 2 en elle-même. –

+0

@MarcB C'est en quelque sorte mais dépend seulement de la façon dont je peux utiliser ma propre classe disponible dans les deux classes. –

Répondre

10

Tout d'abord, assurez-vous que vous include le fichier de classe avant de l'utiliser:

include_once 'path/to/tpl_functions.php'; 

Cela devrait être fait soit dans votre index.php ou au-dessus de la classe qui utilise tpl_function. Notez également la possibilité de autoloading classes:

Depuis PHP5 vous avez la possibilité de charger automatiquement des classes. Cela signifie que vous enregistrez une fonction hook appelée à chaque fois lorsque vous essayez d'utiliser une classe dont le fichier de code n'a pas encore été inclus. Pour ce faire, vous n'aurez pas besoin d'avoir des instructions include_once dans chaque fichier de classe. Voici venir un exemple:

index.php ou quel que soit le point d'entrée de l'application:

spl_autoload_register('autoloader'); 

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

A partir de maintenant, vous pouvez accéder aux classes sans à se soucier, y compris les fichiers de code plus. Essayez:

$process = new process(); 

Sachant cela, il y a plusieurs façons comment vous pouvez utiliser la template_functions classe


Juste l'utiliser:

Vous pouvez accéder à la classe n'importe quelle partie du code si vous en créez une instance:

class process 
{ 
    //all process with system and db 

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

Membres de l'instance:

Prenez la classe de processus par exemple. Pour les template_functions disponibles dans la classe process, vous créez un membre d'instance et lsinitialisez quelque part, où vous en avez besoin, le constructeur semble être un bon endroit:

//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

Merci pour la réponse rapide .. juste un peu plus de requêtes .. protected est une variable, donc est-ce nécessaire? $ '? et j'ai oublié de mentionner ma classe dans un fichier php séparé –

+0

Alors, où inclure mon fichier? –

+0

Vérifier ma mise à jour – hek2mgl

0

Vous pouvez étendre la classe template_functions, vous peut utiliser toutes les fonctions.

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

Mais que dire de «processus de classe»? désolé mais en essayant de comprendre –

Questions connexes