Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Вызов метода класса из функции


Автор: HipJ 11.9.2007, 15:16
Помогите smile пожалуйста
Использую DBSimple в своем скрипте
Код

require_once "DbSimple/Generic.php";
$DB = DbSimple_Generic::connect("mysql://testbd:12345@localhost/testbd");


если далее использовать этот класс
 
Код

$code = "";
$d_id = 1;
$code = $DB->selectCell(
    'SELECT sdname FROM data WHERE did=?', 
    $d_id
);
echo $code;

то все в порядке

а если все тоже самое, но в функции
Код

function LoadData($d_id){
$code = "";
$code = $DB->selectCell(
    'SELECT data FROM data WHERE did=?', 
    $d_id
);
echo $code;
}

то появляется ошибка 
Notice: Undefined variable: DB in j:\home\testbed2\www\lib\components\livescores.php on line 19

Fatal error: Call to a member function selectCell() on a non-object in j:\home\testbed2\www\lib\components\livescores.php on line 19

объясните почему так происходит.. и что сделать для решения данной проблемы.

Автор: IZ@TOP 11.9.2007, 15:30
Патамушта нужно брать переменную $DB из суперглобального массива $GLOBASL, или объявлять ее в начале функции:

Код

global $DB


Добавлено через 34 секунды
Ну, или что еще лучше, использовать паттерн Singletone.

Автор: mishaSL 11.9.2007, 15:41
Или передавать класс в функцию как аргумент.

Автор: IZ@TOP 11.9.2007, 15:50
Цитата(mishaSL @  11.9.2007,  16:41 Найти цитируемый пост)
Или передавать класс в функцию как аргумент. 

Изврат.

Автор: Acer 11.9.2007, 15:51
Лучше ссылку на обьект...

Автор: mishaSL 11.9.2007, 16:45
Цитата(IZ@TOP @  11.9.2007,  15:50 Найти цитируемый пост)
Изврат. 

Почему же изврат, по мне это куда удобнее чем global $DB. Но это кому как удобнее. 
Оооо... только сейчас заметил, что ошибся в попыхах... ссори не класс конечно же передавать, а объект.

Цитата(Acer @  11.9.2007,  15:51 Найти цитируемый пост)
Лучше ссылку на обьект... 

В PHP5 все объекты по умолчанию передаются по ссылке, в PHP4 конечно надо указать &

Автор: ewolf 11.9.2007, 18:34
Цитата(mishaSL @  11.9.2007,  16:45 Найти цитируемый пост)
Почему же изврат, по мне это куда удобнее чем global $DB. Но это кому как удобнее. Оооо... только сейчас заметил, что ошибся в попыхах... ссори не класс конечно же передавать, а объект.


Достинство твоего подхода будет только тогда, когда функция должна обращаться к методам какого-то определенного объекта (например, есть несколько подключений к разным базам данных). Если же мы обращаемся к глобальному объекту, то лучше использовать global

Автор: mishaSL 11.9.2007, 18:55
Цитата(ewolf @  11.9.2007,  18:34 Найти цитируемый пост)
то лучше использовать global

Цитата(mishaSL @  11.9.2007,  16:45 Найти цитируемый пост)
Но это кому как удобнее.


Просто я недолюбливаю использование global в принципе.

Автор: WolfON 11.9.2007, 19:18
а лучше упаковать в класс и $this->db smile

Автор: HipJ 11.9.2007, 19:58
Всем большое спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)