<?php
$settings['hostname'] = '127.0.0.1';
$settings['username'] = 'root';
$settings['password'] = 'root';
$settings['database'] = 'band';
$settings['dbdriver'] = 'mysql';
/**
* DATABASE
*/
class database
{
protected $settings;
function __construct()
{
}
function connect()
{
$this->start = new PDO(
$this->settings['dbdriver'] . ':host='.
$this->settings['hostname'] . ';dbname='.
$this->settings['database'],
$this->settings['username'],
$this->settings['password'],
array(PDO::ATTR_PERSISTENT => true));
$this->start->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
}
}
?>
ok im все еще студент, поэтому сегодня я узнаю о базе данных о масштабах и связях вопрос в том, как я могу поместить $settings из класса в защищенные настройки $в классе?
Вы уже находитесь на правильном пути в коде, который вы показываете: не используйте общедоступную (глобальную) область видимости вообще - он не считает, что хорошая практика в ООП зависит от глобальных переменных, потому что она разрушает инкапсуляцию. Вместо этого вводите настройки в объект при его инициализации.
Для этого можно добавить конструктор:
function __construct($settings)
{
$this->settings = $settings;
}
а затем инициализируйте класс следующим образом:
$database= new database($settings);
или так, чтобы предотвратить перемещение переменной с конфиденциальными данными:
$database= new database(array('hostname' => '127.0.0.1',
'username' => 'root',
'password' => 'root',
'database' => 'band',
'dbdriver' => 'mysql'));
В качестве побочного примечания, при использовании в производстве, подумайте об удалении переменной password
из массива после подключения для обеспечения безопасности. Это ничего существенного, кроме приятной дополнительной вещи.
var_dump
на ошибки в подробном режиме. Это не очень важно, но не может повредить
Либо передайте аргумент функции $settings
as, импортируйте его в текущую область с помощью global
, либо получите доступ через $GLOBALS
.
Пропустить как аргумент:
public function __construct(array $settings) {
$this->settings = $settings;
}
Импорт с использованием global
:
public function __construct() {
global $settings;
$this->settings = $settings;
}
Используйте $GLOBALS
:
public function __construct() {
$this->settings = $GLOBALS['settings'];
}
Я бы выбрал проход как вариант arg. Другие версии - это только грязные хаки (imho).
Лучшим способом было бы либо посмотреть в файле конфигурации (например, XML файл) для конфигурации, либо вызвать метод connect() (или ваш конструктор) с требуемыми параметрами.