Mise à jour
Pour une classe de base de données qui nécessite des options de configuration, le plus simple façon serait d'utiliser la config v alues comme paramètres (exemple 1 de ma réponse originale ci-dessous).
Une approche plus complexe, mais aussi plus flexible, serait une classe Config.
class Config
{
private $config = array();
public function __construct(array $config)
{
$this->config = $config;
}
public function Register($key, $value)
{
$this->config[$key] = $value;
}
public function Get($key)
{
if (!isset($this->config[$key])) return null;
return $this->config[$key];
}
}
Votre classe DB ressemblerait à quelque chose comme ceci:
class Database
{
private $config = null;
public function __construct(Config $config)
{
$this->config = $config;
}
public function Connect()
{
do_connect_stuff($this->config->Get('host'), $this->config->Get('user'), .....);
}
}
fichier config.php
<?php
$config = new Config(
array(
"host" => "localhost",
"user" => "user",
...
)
);
/*
alternative:
$config = new Config();
$config->Register('host', 'localhost');
$config->Register('user', 'user');
...
*/
?>
fichier qui nécessite la base de données:
<?php
$database = new Database($config);
$database->Connect();
?>
Comme un côté indice: Utilisez PDO, c'est bien mieux que e vieilles fonctions mysql_*
.
Réponse originale
Le style approprié serait de transmettre les variables aux fonctions en tant que paramètre ou les transmettre lors de la création de l'objet. Vous pouvez également utiliser les méthodes Init
pour transmettre les paramètres.
Exemples:
(Lequel le code suivant, vous devez utiliser dépend de ce que vous avez déjà et comment votre code est conçu, comme « propre » serait un objet pour lequel vous transmettre les variables lorsque vous appelez la méthode processAction
En supposant que dans votre script vous avez une variable $action
que vous obtenez de $ _GET ou d'une autre manière.
L'utilisation d'un objet
class Controller
{
public function ProcessAction($action, $some_other_parameter, $and_yet_another_parameter)
{
[...]
}
}
Vous appelez ensuite avec
$action = do_some_stuff_to_get_action();
$controller = new Controller();
$controller->ProcessAction($action, $other_parameter, $second_parameter);
Utilisation d'une classe statique
class Controller
{
public static function ProcessAction($action, $some_other_parameter, $and_yet_another_parameter)
{
[...]
}
}
Appelé avec:
$action = do_some_stuff_to_get_action();
Controller::ProcessAction($action, $other_parameter, $second_parameter);
En passant les paramètres avant d'appeler la fonction
objet
class Controller
{
private $action = "";
private $some_other_parameter = "";
public function __construct($action, $some_other_parameter)
{
$this->action = $action;
$this->some_other_parameter = $some_other_parameter;
}
public function ProcessAction()
{
if ($this->action == 'do_stuff')
{
[...]
}
}
}
Appelé avec:
$action = do_some_stuff_to_get_action();
$controller = new Controller($action, $other_parameter);
$controller->ProcessAction();
méthodes statiques
class Controller
{
private static $action = "";
private static $some_other_parameter = "";
public static function Init($action, $some_other_parameter)
{
self::$action = $action;
self::$some_other_parameter = $some_other_parameter;
}
public static function ProcessAction()
{
if (self::$action == 'do_stuff')
{
[...]
}
}
}
Appelé avec:
$action = do_some_stuff_to_get_action();
Controller::Init($action, $other_parameter);
Controller::ProcessAction();
L'utilisation de constantes est la solution. – Hammerite
le mot clé 'global' devrait être évité. Cela rendra 'MyClass' dépendante de la portée globale qui rend votre application plus difficile à maintenir et à désinstaller. – Gordon
merci pour la réponse aimable. ma page PHP par exemple config.php inclura Php $ dbserver = ""; $ username = ""; $ password = ""; $ database = ""; > ma classe class a { fonction db_connect() { mysql_connect (dbserver de $, $ username, mot de passe $?); } } Je pense que je suis plus clair maintenant. Comment vais-je utiliser les variables listées dans config.php dans ma classe a? – booota