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


Автор: WolfAlone 6.1.2009, 03:14
Здравствуйте! Есть в PHP 5 очень полезная штука: SQLite3. Вопрос в том, как её использовать в классах?
Работа заключается в следующем:
1. $base=new PDO("sqlite:base.db");
2. $base->beginTransaction(); //Открываем БД на чтение
3. $base->query("SQL запрос");
4. $base->commit(); //Закрываем БД

Вопрос в том, как правильно написать класс в PHP в котором бы в начале класса выполнялись строки 1 и 2, потом шли функции класса, а затем выполнялась бы строка 4.

Перепробовал уже все возможные варианты! Упорно выдает ошибку синтаксиса без объяснения причин и номера ошибки!

Код

P.S. Пытаюсь запихнуть это например в класс:
class temp
{
$base=new PDO("sqlite:base.db");
$base->beginTransaction(); //Открываем БД на чтение
...
$base->commit(); //Закрываем БД
};


Проблема в том, что без класса всё это прекрасно работает, а в классе - не хочет!

Добавлено через 1 минуту и 13 секунд
Уже 18ый час долблюсь над одной строчкой кода... 

Автор: SneG0K 6.1.2009, 04:02
Цитата(WolfAlone @  6.1.2009,  02:14 Найти цитируемый пост)
Проблема в том, что без класса всё это прекрасно работает, а в классе - не хочет!

Ээээ.... Так оно и не будет работать. Ты бы про ООП в PHP прочитал.
Код

class temp
{
public function __construct() {
$base=new PDO("sqlite:base.db");
$base->beginTransaction(); //Открываем БД на чтение
...
$base->commit(); //Закрываем БД
}
}

Да это вообще неправильный код! Класс это контейнер функций и данных. А не просто обвертка для функции. Синтаксис не правильный

Автор: krundetz 6.1.2009, 10:06
WolfAlone, к сказанному SneG0K добавлю следующие:
Код

new temp();

тоесть не забудь создать экземпляр класса.

А вообще возможны два пути:
1. Инкапсуляция тоесть примерно то что ты захотел сделать и
2. Наследование
Что предпочесть выбирай когда прочтешь что нибудь про ООП в PHP. Про себя могу сказать что в подавляющем числе случаев удобнее работать с инкапсуляцией.

Автор: WolfAlone 6.1.2009, 13:30
<?php
SneG0K, спасибо огромное!

Почитал про ООП в PHP, немного помогло... Только вот теперь вопрос в том, почему переменная $base не инициализируется во всех остальных функциях? При попытке сделать вот так:

Код

<?

class temp
{
public function __construct() {
$base=new PDO("sqlite:base.db3");
$base->beginTransaction(); //Открываем БД на чтение
}
public function SQL_Query() {
    $qry=$base->query("SELECT * FROM names");
    while ($result=$qry->fetch()) {
        //Обрабатываем результат
    };    
}

public function __destruct() {
    $base->commit(); //Закрываем БД
}
}
$x = new temp();
$x->SQL_Query();

?>


При попытке сделать так, выдает ошибку: Fatal error: Call to a member function query() on a non-object in C:\Program Files\VertrigoServ\www\1.php on line 10

Автор: Canarat 6.1.2009, 13:41
WolfAlone, читай ещё и про переменные в PHP и области их видимости. Можно сделать так:
Код

class temp {
private $base;

public function __construct() {
$this->base=new PDO("sqlite:base.db3");
$this->base->beginTransaction(); //Открываем БД на чтение
}
...
}


Автор: WolfAlone 6.1.2009, 16:58
Спасибо огромное всем, кто принял участие в решении моего вопроса! Очень помогли, это прямо подарок мне на Рождество!
Выражаю особую благодарность г-ну Canarat и г-ну SneG0K! Всем ещё раз огромное спасибо! Тема закрыта!

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