Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Значения переменных функции(метода) в классе 
:(
    Опции темы
bobroff
Дата 20.3.2009, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Здравствуйте. Думаю вопрос простой, но самостоятельно ответ найти не удалось. 

К примеру есть класс:
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. 

Код, вида:
function db_connect($host=$this->db_host,$login=$this->db_login,$password=$this->db_password) { 
$this->db_connection=mysql_connect($host,$login,$password);

...в не работает.

Самому, как новичку, приходит в голову только проверка каждого параметра через isset(). Но, мне кажется, должно быть более простое решение. Подскажите.
PM MAIL   Вверх
enof
Дата 20.3.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



Код

function db_connect($host = "localhost", $login = "root", $password = "root")

PM MAIL ICQ Skype   Вверх
bobroff
Дата 20.3.2009, 23:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Это слишком просто. Вообще, эти переменные/константы будут определяться в другой подключаемой библиотеке.
PM MAIL   Вверх
enof
Дата 20.3.2009, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



bobroff, 
как вариант объявлять функцию без параметров, в самой функции получать переданные параметры, если чего-то нехватает,
то global $var; и юзать.

У вас же класс, тогда без global.

Это сообщение отредактировал(а) enof - 20.3.2009, 23:13
PM MAIL ICQ Skype   Вверх
bobroff
Дата 20.3.2009, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



Вроде подсказали более простое решение:

PHP:
 <?php
 class a {
     const DEFAULT_HOST = 'localhost';
     // ...
     public function db_connect($host = self::DEFAULT_HOST, // ...) {

Буду пробовать.
PM MAIL   Вверх
enof
Дата 20.3.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 837
Регистрация: 23.1.2009
Где: Санкт-Петербург

Репутация: 30
Всего: 35



bobroff,   smile мой первый пост прочитайте.
PM MAIL ICQ Skype   Вверх
IZ@TOP
Дата 21.3.2009, 00:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Самый простой вариант, ИМХО

Код

function __construct(...)
{
    $this->host = (isset($GLOBALS['db']['host']) ? $GLOBALS['db']['host'] : $this->default_host;
    // ... и все в таком духе
    $this->connect = mysql_connect(....); // тут соединение
}


Если есть желание, пишите конфиги с возможностью перезаписи значений дефолтными в случае их отсутствия.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
bobroff
Дата 21.3.2009, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 20.3.2009

Репутация: нет
Всего: нет



В итоге пока получилось следующее:
config.php:
Код

<?
// Параметры работы с базой данных;
define ("DB_HOST","localhost",true); // Сервер базы данных;
define ("DB_DATABASE","emeal",true); // База данных;
define ("DB_LOGIN","root",true); // Логин (имя пользователя) к базе данных;
define ("DB_PASSWORD","root",true); // Пароль к базе данных;
?>


db.module:
Код

<?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());
}

}
?>


В целом работает, параметры по умолчанию устанавливает. Но опять же небольшой вопрос. 
Когда создаешь новый объект из этого класса:
Код

$newconnect = new db();
$newconnect->db_connect();

Все ок.

Код

$newconnect = new db("server");
$newconnect->db_connect();

Тоже все ок: выдвет ошибку подключения, т.к. "server" не существует.

А когда хочу, например, выбрать другую базу, пропуская указание сервера (т.е. скрипт должен подставить сервер по-умолчанию):
Код

$newconnect = new db(,"base");
$newconnect->db_connect();

Выдает ошибку: "Parse error: syntax error, unexpected ',', expecting ')' in..."
В чем тут ошибка? Почему нельзя пропустить параметр?

Когда пишешь вот так:
Код

$newconnect = new db("","base");
$newconnect->db_connect();

Все ок.
PM MAIL   Вверх
IZ@TOP
Дата 21.3.2009, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

Репутация: 44
Всего: 73



Цитата(bobroff @  21.3.2009,  13:29 Найти цитируемый пост)
А когда хочу, например, выбрать другую базу, пропуская указание сервера (т.е. скрипт должен подставить сервер по-умолчанию):

http://forum.vingrad.ru/index.php?showtopi...t&p=1818424 этот пост тебе поможет

Цитата(bobroff @  21.3.2009,  13:29 Найти цитируемый пост)
Выдает ошибку: "Parse error: syntax error, unexpected ',', expecting ')' in..."
В чем тут ошибка? Почему нельзя пропустить параметр?

Передавай null в качестве значения. Но, на твоем месте, я бы вынес в конфиг эти параметры и считывал оттуда.
Код

$config['database'] = 'mydatabase';

// ...

class db {

    // ...

     /**
      * Параметр для соединения с базой данных по умолчанию
      */
     protected $database = 'test';

    // ...

    public function __construct()
    {
          $this->database = isset($GLOBALS['config']['database']) ? $GLOBALS['config']['database'] : $this->database;
          // ...
          $this->connection = mysql_connect(...);
    }
    
    // ...
}



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.