Здравствуйте. Думаю вопрос простой, но самостоятельно ответ найти не удалось. К примеру есть класс: Код (Text): class db { var $db_login="root"; var $db_password="root"; var $db_host="localhost"; var $db_connection; function db_connect($host,$login,$password) { $this->db_connection=mysql_connect($host,$login,$password); } } Как сделать следующее: при вызове метода db_connect, если не переданы параметры $host, $login, $password, то устанавливаются параметры по умолчанию: $db_login, $db_password, $db_host. Код, вида: Код (Text): function db_connect($host=$this->db_host,$login=$this->db_login,$password=$this->db_password) { $this->db_connection=mysql_connect($host,$login,$password); ...в не работает. Самому, как новичку, приходит в голову только проверка каждого параметра через isset(). Но, мне кажется, должно быть более простое решение. Подскажите.[/code]
Так что или проверки вставить, а-ля isset или так: PHP: <?php class a{ private $name='Медвед'; private $surname='Преведович'; public function test($name = 'Медвед', $surname = 'Преведович'){ echo 'Значение $name: '.$name.'<br />'; echo 'Значение $surname: '.$surname.'<br />'; } } $testClass = new a(); $testClass->test('Акринель', 'Данонович'); $testClass->test(); ?>
PHP: <?php class a { const DEFAULT_HOST = 'localhost'; // ... public function db_connect($host = self::DEFAULT_HOST, // ...) {
Код (Text): <?php class a { const DEFAULT_HOST = 'localhost'; // ... public function db_connect($host = $this->DEFAULT_HOST, // ...) Работать не будет, но не понимаю почему. В чем отличие self и $this. Читал мануал, так и не понял.
То mantell, Sergey89: Понял. Спасибо. В итоге пока получилось следующее: config.php: Код (Text): <? // Параметры работы с базой данных; define ("DB_HOST","localhost",true); // Сервер базы данных; define ("DB_DATABASE","emeal",true); // База данных; define ("DB_LOGIN","root",true); // Логин (имя пользователя) к базе данных; define ("DB_PASSWORD","root",true); // Пароль к базе данных; ?> db.module: Код (Text): <?php require_once ("lib/config.php"); class db { private $default_host; private $default_database; private $default_login; private $default_password; private $db_connect; public function __construct($host=DB_HOST,$database=DB_DATABASE,$login=DB_LOGIN,$password=DB_PASSWORD) { $this->default_host = $host; $this->default_database = $database; $this->default_login = $login; $this->default_password = $password; } public function db_connect() { $this->db_connect = mysql_connect($this->default_host,$this->default_login,$this->default_password) or die("Не возможно установить соединение с сервером базы данных: ".mysql_error()); mysql_select_db($this->default_database, $this->db_connect) or die("Не возможно подключиться к базе данных: ".mysql_error()); } } ?> В целом работает, параметры по умолчанию устанавливает. Но опять же небольшой вопрос. Когда создаешь новый объект из этого класса: Код (Text): $newconnect = new db(); $newconnect->db_connect(); Все ок. Код (Text): $newconnect = new db("server"); $newconnect->db_connect(); Тоже все ок: выдвет ошибку подключения, т.к. "server" не существует. А когда хочу, например, выбрать другую базу, пропуская указание сервера (т.е. скрипт должен подставить сервер по-умолчанию): Код (Text): $newconnect = new db(,"base"); $newconnect->db_connect(); Выдает ошибку: "Parse error: syntax error, unexpected ',', expecting ')' in..." В чем тут ошибка? Почему нельзя пропустить параметр?[/code] Когда пишешь вот так: Код (Text): $newconnect = new db("","base"); $newconnect->db_connect(); Все ок.
PHP: <? class db { var $db_login="root"; var $db_password="root"; var $db_host="localhost"; var $db_connection; function db_connect($host = null,$login = null,$password = null) { if (is_null($host)) $host = $this->db_host; if (is_null($login)) $login = $this->db_login; if (is_null($password)) $password = $this->db_password; $this->db_connection=mysql_connect($host,$login,$password); } } $newconnect = new db("server"); $newconnect->db_connect(); $newconnect = new db(null,"base"); $newconnect->db_connect();