2010-04-07 5 views
2

J'ai été dans ce problème pendant un certain temps déjà, et ai posé quelques questions à ce sujet ici Stackoverflow. J'ai quelques conseils, mais je ne peux tout simplement pas le comprendre. Quelqu'un pourrait-il me donner un exemple de cours qui fonctionnent bien ensemble.PHP: Classes pour utiliser des fonctions les unes des autres?

J'ai 3 (peut-être plus) classes:

  • mysql
  • utilisateur
  • alertes

Comme je le disais, quelqu'un pourrait donner un exemple, de sorte que ces classes pourraient utiliser des fonctions de l'autre classe, p.ex. l'utilisateur peut utiliser les fonctions de mysql. Je demande un exemple simple, à des fins d'apprentissage.

Et s'il vous plaît, pas de google-suggestions ou des liens vers d'autres questions. J'ai essayé de chercher cela pendant un moment déjà. Pas de succès, cependant.

Lainé Martti

+1

Je vous recommande de lire les bases de POO sur http://us3.php.net/oop5.basic, d'écrire du code, et de poster ce code avec une question quand vous frappez un mur. Il existe des dizaines de façons de répondre à cette question, et aucune n'est la «bonne» réponse. –

+0

En tant que nouvelle main dans le domaine de la POO, je comprends parfaitement votre désir d'obtenir une réponse. Il semble que beaucoup d'exemples soient simplement trop compliqués et commencent à utiliser des classes et des interfaces abstraites quand vous voulez simplement voir l'interaction simple entre quelques classes dans une utilisation quotidienne. – dscher

Répondre

4

Je recommande vraiment que vous lisez sur les classes d'abord - http://php.net/manual/en/language.oop5.php parce que Ce sont des concepts de base si vous ne comprenez pas un seul exemple de code ne vous aidera pas beaucoup.

class Mysql { 
    // Public function accessible from everywhere, with class instance 
    public function hello() { 
     echo '<br>Mysql says Hello'; 
    } 
    // Static function accesible from everywhere, without class instance 
    static function bye() { 
     echo '<br>Mysql says Bye'; 
    } 
} 

class User { 
    // Public function accessible from everywhere, with class instance 
    public function hello() { 
     $mysql = new Mysql(); 
     $mysql->hello(); 
     Mysql::bye(); 
    } 
} 

class Alert { 
    // Static function accesible from everywhere, without class instance 
    static function hello() { 
     $user = new User(); 
     $user->hello(); 
    } 
} 

$user = new User(); 
$user->hello(); 

Mysql::bye(); 

Alert::hello(); 
+0

Merci, en fait je sais quelque chose sur les cours, mais pas tellement: D Belle réponse, cependant :) –

2

Il est difficile de comprendre exactement ce que vous voulez dire quand vous dites « travailler bien ensemble ». Les classes peuvent être utilisées ensemble d'une multitude de façons. Si elles ne pouvaient pas être alors la programmation orientée objet ne serait pas très bonne.

Voici un exemple simple:

class mysql { 
    private $alert; 
    public function __construct(alerts $alert) { 
     $this->alert = $alert; 
    } 

    public function dosomething() { 
     if(/* something went wrong */) { 
      $this->alert->showAlert(); 
     } 
    } 
} 
0

Il y a deux façons vous pouvez le faire.

1er: Utiliser des méthodes statiques

<?php 
class mysql_database 
{ 
    public static function query($q) 
    { 
     return mysql_query($q); 
    } 
} 

class user 
{ 
    public function get() 
    { 
     //calling static method from another class 
     return mysql_database::query("SELECT * FROM users"); 
    } 
} 
?> 

2: donner des exemples d'objets en tant que paramètres à d'autres objets méthodes

<?php 
class mysql_database 
{ 
    public function query($q) 
    { 
     return mysql_query($q); 
    } 
} 

class user 
{ 
    public function get($DB) 
    { 
     //calling method using given instance 
     return $DB->query("SELECT * FROM users"); 
    } 
} 

$DB = new mysql_database(); 
$user = new user(); 
$user->get($DB); 
?> 
0

Vous pouvez facilement:

  • Instancier un objet d'une classe dans une autre
  • Passer une instance d'objet dans un autre: on appelle cela l'injection de dépendance
  • Utilisez la fonction statique appels

Dans toutes les grandes applications PHP, je vois un mélange de tous les 3. Thei r L'utilisation dépend de la conception globale de l'application, de l'utilisation, de la refactorisation des besoins de testabilité, etc.

0

Les classes doivent fonctionner ensemble pour obtenir le résultat souhaité. Si vous cherchez l'injection de dépendance en particulier ou d'autres méthodes, ils sont expliqués dans la plupart des publications sur la POO.

Mais si disons que votre Mysql classe expose un certain nombre de fonctions qui seront utilisées par votre classe d'utilisateur, vous pouvez injecter une instance de la classe Mysql dans votre classe d'utilisateur sur instanstiation:

class User { 

private $db = null; 

public function __construct($mysql) { 
    $this->db = $mysql 
} 

public function getUserName($userID){ 
    $sql = "SQL_QUERY"; 
    $result = $this->db->ExecuteQuery($sql); 
} 

} 

S'il vous plaît assurez-vous vous lisez le CONS de Dependency Injection et comprenez pourquoi cette méthode est préférée aux autres. Si vous voulez changer votre classe Mysql en DBClass et ne pas casser votre code existant, vous devrez implémenter les mêmes méthodes. De cousre cela peut devenir plus "compliqué" donc une conception soigneuse pourrait être nécessaire (vos classes pourraient devoir étendre des classes abstraites ou implémenter des interfaces) ....

Je suggère que vous passiez du temps sur la littérature et étudiez quelques modèles pour avoir une idée générale ... c'est assez pour vous aider à démarrer (un bon point de départ à mon avis)

0

suivant est un autre exemple.

class MySql 
{ 
    private function query($q) 
    { 
     return mysql_query($q); 
    } 

    public function checkCredentials($user, $pass) 
    { 
     $query = "" // add code here to check the user credentials 
     $result = query($query); 

     $outcome = <true/false>;//based on however you analyze your result 
     return $outcome; 
    } 
} 

class alert 
{ 
    public function generateAlert($alert) 
    { 
    //code to display your alert 
    } 
} 

class user 
{ 
    var $mysql; 
    var $alert; 

    public function __construct($mysql, $alert) 
    { 
    $this->mysql = $mysql; 
    $this->alert = $alert; 
    } 

    public function checkLogin($user, $pass) 
    { 
    if (!$this->mysql->checkCredentials($user, $pass)) 
     $this->alert->generateAlert("login failed!"); 
    } 
} 

Il y a plusieurs façons de faire la conception orientée objet, cela dépend vraiment de ce que les exigences de votre projet sont. Je recommande également de visiter le site PHP et regarder leurs tutoriels OOP.

Questions connexes