Update
Для класса базы данных, которая требует опции конфигурации, простейший путь должен был бы использовать конфигурацию v (пример 1 моего первоначального ответа ниже).
Более сложным, хотя и более гибким подходом является Config-Class.
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];
}
}
Ваш класс DB будет выглядеть примерно так:
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'), .....);
}
}
config.php Файл
<?php
$config = new Config(
array(
"host" => "localhost",
"user" => "user",
...
)
);
/*
alternative:
$config = new Config();
$config->Register('host', 'localhost');
$config->Register('user', 'user');
...
*/
?>
файл, который требует базы данных:
<?php
$database = new Database($config);
$database->Connect();
?>
В стороне Подсказка: используйте PDO, это намного лучше, чем th e старые mysql_*
функции.
Оригинал ответа
Правильный стиль должен был бы передать переменные в функции в качестве параметра или передать их при создании объекта. Вы также можете использовать методы Init
для передачи параметров.
Примеры:
(Какой из следующего кода, который вы должны использовать, зависит от того, что у вас уже есть, и как ваш код разработан, то «чистый» способ был бы объект, для которого вы передаете переменные при вызове метода ProcessAction)
Предполагая, что в вашем скрипте есть переменная $action
, которую вы получаете от $ _GET или каким-либо другим способом.
Использование объекта
class Controller
{
public function ProcessAction($action, $some_other_parameter, $and_yet_another_parameter)
{
[...]
}
}
Вы затем вызвать его с
$action = do_some_stuff_to_get_action();
$controller = new Controller();
$controller->ProcessAction($action, $other_parameter, $second_parameter);
Использование статического класса
class Controller
{
public static function ProcessAction($action, $some_other_parameter, $and_yet_another_parameter)
{
[...]
}
}
Вызывается с:
$action = do_some_stuff_to_get_action();
Controller::ProcessAction($action, $other_parameter, $second_parameter);
Передача параметров перед вызовом функции
Объект
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')
{
[...]
}
}
}
Вызывается с:
$action = do_some_stuff_to_get_action();
$controller = new Controller($action, $other_parameter);
$controller->ProcessAction();
статические методы
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')
{
[...]
}
}
}
Вызывается с:
$action = do_some_stuff_to_get_action();
Controller::Init($action, $other_parameter);
Controller::ProcessAction();
Использование констант - путь. – Hammerite
следует избегать ключевого слова 'global'. Это заставит 'MyClass' зависеть от глобальной области, что затрудняет работу вашего приложения и отменяет его. – Gordon
спасибо за добрый ответ. Моя php-страница, например config.php, будет содержать Php $ dbserver = ""; $ username = ""; $ password = ""; $ database = ""; > мой класс класс а { функция db_connect() { mysql_connect ($ DbServer, $ имя пользователя, пароль $); } } Я думаю, что теперь я более ясен. Как использовать переменные, перечисленные в config.php, в моем классе a? – booota