2010-05-13 4 views
1

voici mon exemple de classe pourquoi je veux nicher.classes d'imbrication dans php

include("class.db.php"); 

class Cart { 

function getProducts() { 

//this is how i do it now. 
//enter code here`but i dont want to redeclare for every method in this class. 
//how can i declare it in one location to be able to use the same variable in every method? 
$db = new mysqlDB; 


$query = $db->query("select something from a table"); 
return $query 

} 

} 

Répondre

-1

Vous pourriez avoir quelque chose comme ça

<?php 
    class cart 
    { 
      protected $database; 

      function __construct() 
      { 
       $this->database = new mysqlDB; 
      } 

      function getProducts() 
      { 
       $this->database->query("SELECT * FROM..."); 
      } 
    } 
?> 

__construct est la fonction qui est appelée lorsque vous instancier une classe.

+1

Je recommanderais contre cela parce que ce serait un problème si vous vous êtes déjà connecté à la base de données dans une autre partie du code, ou si vous voulez créer plusieurs chariots. Utilisez la réponse ci-dessous car elle injecte la dépendance à travers le constructeur. –

0

Isolez le code commun à chaque méthode/fonction dans une autre méthode/fonction interne privée.

Si vous avez besoin de l'exécuter automatiquement une fois pour l'objet lors de sa création, c'est ce que __construct est pour.

+0

ouais merci, j'ai compris – michael

12

Tirez parti des propriétés.

class Cart { 

    private $db; 

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

    public function getProducts() { 
     $query = $this->db->query(. . .); 
     return $query; 
    } 

} 

Vous allez créer l'objet de base de données en dehors de votre classe (couplage lâche FTW).

$db = new MysqlDb(. . .); 
$cart = new Cart($db);