[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: как работать с объектом mysqli из своего класса?
set_rus
стало интересно (и появилось время) разобраться с mysqli.. набросал простой примерчик для себя
примерчик не заработал...

обрыл весь форум и google, ни нашел ниче подходящего - стало понятно что не там ищу
подскажите где посмотреть... хотя посмотреть это конечно хорошо но хотелось бы и услышать профессиональное мнение как реализовать такую стуктуру в Design Patterns (какие шаблоны тут применимы)

чувствую что все элементарно но по своей неООПытности пока не могу понять

Код
$mysqli = new mysqli("localhost", "db", "pass", "base");

/* check connection */
if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
}

$content = new DataPrint;
print $content->printD();

class DataPrint{
    private $mysqli;
    function printD(){
        /* Select queries return a resultset */
        if ($result = $mysqli->query("SELECT * FROM table1 LIMIT 10")) {
            printf("Select returned %d rows.<br>", $result->num_rows);

            while ($row = $result->fetch_row()) {
            printf ("%s | %s | %s<br>", $row[0], $row[1], $row[2]);
            }

            /* free result set */
            $result->close();
        }
    }
}

$mysqli->close();


Fatal error: Call to a member function query() on a non-object in



Спустя 16 минут, 10 секунд (15.02.2008 - 13:33) mechanic написал(а):
дык $mysqli то пустая!
объявлена как private и все
ессно у нее нет ни методов ни свойств, это не объект

после private $mysqli добавь это
Код
function __construct($mysqli) {
    $this->mysqli = $mysqli;
}

строку $content = new DataPrint; поменяй на $content = new DataPrint($mysqli);
а в function printD(){} везде поменяй $mysqli на $this->mysqli

Спустя 36 минут, 21 секунда (15.02.2008 - 14:09) Timok написал(а):
set_rus, про паттерны ты рановато... Почитай про основные принципы ООП сначала

Спустя 7 минут, 36 секунд (15.02.2008 - 14:17) set_rus написал(а):
Цитата(Timok @ 15.2.2008, 17:09) [snapback]33653[/snapback]
set_rus, про паттерны ты рановато... Почитай про основные принципы ООП сначала

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

Спустя 1 минута, 34 секунды (15.02.2008 - 14:18) mechanic написал(а):
но как ни странно код более-менее красивый smile.gif
4 пробела, коменты и все такое smile.gif

Спустя 1 минута, 28 секунд (15.02.2008 - 14:20) mechanic написал(а):
Цитата(set_rus @ 15.2.2008, 14:17) [snapback]33656[/snapback]
здесь ни только новички вопросы задают..
я использовал классы уже давно... и не только на PHP... мне не надо обьяснять что такое класс, обьект,свойство и метод
согласен я не все понимаю поэтому и спрашиваю... мне интересно разобраться с паттернами


тогда у меня вопрос, как же ты их использовал без $this?
без этого теоретически можно обойтись, но.. )

Спустя 3 минуты, 44 секунды (15.02.2008 - 14:24) Timok написал(а):
в C++, Java, C# без this можно обращаться к нестатическим членам класса. В php нельзя.

set_rus, извини если обидел, просто не понял какой именно паттерн ты хочешь реализовать и для каких целей.

Спустя 7 минут, 13 секунд (15.02.2008 - 14:31) set_rus написал(а):
мне не нравится эта конструкция $this->mysqli = $mysqli;
у меня такое ощущение что я делаю копию обьекта $mysqli; а я хотел обращаться к нему на прямую но не могу сообразить как...

Цитата(mechanic @ 15.2.2008, 17:20) [snapback]33660[/snapback]
Цитата(set_rus @ 15.2.2008, 14:17) [snapback]33656[/snapback]
здесь ни только новички вопросы задают..
я использовал классы уже давно... и не только на PHP... мне не надо обьяснять что такое класс, обьект,свойство и метод
согласен я не все понимаю поэтому и спрашиваю... мне интересно разобраться с паттернами


тогда у меня вопрос, как же ты их использовал без $this?
без этого теоретически можно обойтись, но.. )


ребят мне 25 лет я здоровый дядька и ВО за плечами... и без $this-> я жить не могу... давайте не будем хомить

Спустя 11 минут, 41 секунда (15.02.2008 - 14:43) mechanic написал(а):
а мы тут все такие маленькие))))
человек с ВО должен знать как пишется слово "хАмить"
или это было слово "хоХмить"? smile.gif
Цитата
и без $this-> я жить не могу

что то не заметил в классе ни одного $this..

Цитата
у меня такое ощущение что я делаю копию обьекта $mysqli; а я хотел обращаться к нему на прямую но не могу сообразить как.

& ссылки?

Спустя 6 минут (15.02.2008 - 14:49) Timok написал(а):
Цитата(set_rus)
ребят мне 25 лет я здоровый дядька и ВО за плечами...

ты крут, но речь не об этом

Цитата(set_rus)
мне не нравится эта конструкция $this->mysqli = $mysqli;
у меня такое ощущение что я делаю копию обьекта $mysqli; а я хотел обращаться к нему на прямую но не могу сообразить как...

ни какой копии объекта не создается - в php5 объекты передаются по ссылке, как и во всех нормальных ОО-языках (исходя из использования private делаю вывод что у тебя php5). Чтобы скопировать объект нужно напрямую воспользоваться оператором clone.
То что ты делаешь (присваиваешь ссылку на экземпляр класса mysqli переменной-члену класса DataPrint) называется делегированием.

зы: а флейм завязываем

Спустя 4 месяца, 17 дней, 22 часа, 29 минут, 25 секунд (3.07.2008 - 12:18) Sylex написал(а):
а может логичней все же создать объект глобальный и его везде юзать? Например:

Код
$GLOBALS['DB'] = new lib_mysqli;


а методах других классов, например users, писать в начале
Код
global $DB;


и юзать его методы?

Спустя 3 дня, 13 часов, 16 секунд (7.07.2008 - 01:18) LoneCat написал(а):
Ну да, не нравицца $this - тогда через глобальные переменные, хотя с точки зрения ООПщей эрудиции - обычно для этих целей создают объект по паттерну Registry, который существует в единственном экземпляре, и хранит в себе ссылки на так называемые "звездные" объекты, с возможностью их извлечения из любого места программы. Тут по большому счету идет выбор между push и pull подходом, push - в объект пихают необходимые ему данные, в данном случае ссылку на объект бд в конструкторе, pull - объект сам их откуда-нибудь комуниздит, например из массива глобальных переменных или этот пресловутый объект Registry.

З.Ы. Конструкция $this->mysqli = $mysqli вообще абсолютно легитимна, в PHP5 объекты изначально передаются по ссылке, иже в $this->mysqli будет сохранена ссылка на объект, для дальнейшего обращения к нему, а обращения как и положено будут происходить напрямую.


_____________
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.