примерчик не заработал...
обрыл весь форум и 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();
/* 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 добавь это
строку $content = new DataPrint; поменяй на $content = new DataPrint($mysqli);
а в function printD(){} везде поменяй $mysqli на $this->mysqli
объявлена как private и все
ессно у нее нет ни методов ни свойств, это не объект
после private $mysqli добавь это
Код
function __construct($mysqli) {
$this->mysqli = $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 написал(а):
но как ни странно код более-менее красивый 
4 пробела, коменты и все такое

4 пробела, коменты и все такое

Спустя 1 минута, 28 секунд (15.02.2008 - 14:20) mechanic написал(а):
Цитата(set_rus @ 15.2.2008, 14:17) [snapback]33656[/snapback]
здесь ни только новички вопросы задают..
я использовал классы уже давно... и не только на PHP... мне не надо обьяснять что такое класс, обьект,свойство и метод
согласен я не все понимаю поэтому и спрашиваю... мне интересно разобраться с паттернами
я использовал классы уже давно... и не только на PHP... мне не надо обьяснять что такое класс, обьект,свойство и метод
согласен я не все понимаю поэтому и спрашиваю... мне интересно разобраться с паттернами
тогда у меня вопрос, как же ты их использовал без $this?
без этого теоретически можно обойтись, но.. )
Спустя 3 минуты, 44 секунды (15.02.2008 - 14:24) Timok написал(а):
в C++, Java, C# без this можно обращаться к нестатическим членам класса. В php нельзя.
set_rus, извини если обидел, просто не понял какой именно паттерн ты хочешь реализовать и для каких целей.
set_rus, извини если обидел, просто не понял какой именно паттерн ты хочешь реализовать и для каких целей.
Спустя 7 минут, 13 секунд (15.02.2008 - 14:31) set_rus написал(а):
мне не нравится эта конструкция $this->mysqli = $mysqli;
у меня такое ощущение что я делаю копию обьекта $mysqli; а я хотел обращаться к нему на прямую но не могу сообразить как...
тогда у меня вопрос, как же ты их использовал без $this?
без этого теоретически можно обойтись, но.. )
ребят мне 25 лет я здоровый дядька и ВО за плечами... и без $this-> я жить не могу... давайте не будем хомить
у меня такое ощущение что я делаю копию обьекта $mysqli; а я хотел обращаться к нему на прямую но не могу сообразить как...
Цитата(mechanic @ 15.2.2008, 17:20) [snapback]33660[/snapback]
Цитата(set_rus @ 15.2.2008, 14:17) [snapback]33656[/snapback]
здесь ни только новички вопросы задают..
я использовал классы уже давно... и не только на PHP... мне не надо обьяснять что такое класс, обьект,свойство и метод
согласен я не все понимаю поэтому и спрашиваю... мне интересно разобраться с паттернами
я использовал классы уже давно... и не только на PHP... мне не надо обьяснять что такое класс, обьект,свойство и метод
согласен я не все понимаю поэтому и спрашиваю... мне интересно разобраться с паттернами
тогда у меня вопрос, как же ты их использовал без $this?
без этого теоретически можно обойтись, но.. )
ребят мне 25 лет я здоровый дядька и ВО за плечами... и без $this-> я жить не могу... давайте не будем хомить
Спустя 11 минут, 41 секунда (15.02.2008 - 14:43) mechanic написал(а):
а мы тут все такие маленькие))))
человек с ВО должен знать как пишется слово "хАмить"
или это было слово "хоХмить"?
что то не заметил в классе ни одного $this..
& ссылки?
человек с ВО должен знать как пишется слово "хАмить"
или это было слово "хоХмить"?

Цитата
и без $this-> я жить не могу
что то не заметил в классе ни одного $this..
Цитата
у меня такое ощущение что я делаю копию обьекта $mysqli; а я хотел обращаться к нему на прямую но не могу сообразить как.
& ссылки?
Спустя 6 минут (15.02.2008 - 14:49) Timok написал(а):
Цитата(set_rus)
ребят мне 25 лет я здоровый дядька и ВО за плечами...
ты крут, но речь не об этом
Цитата(set_rus)
мне не нравится эта конструкция $this->mysqli = $mysqli;
у меня такое ощущение что я делаю копию обьекта $mysqli; а я хотел обращаться к нему на прямую но не могу сообразить как...
у меня такое ощущение что я делаю копию обьекта $mysqli; а я хотел обращаться к нему на прямую но не могу сообразить как...
ни какой копии объекта не создается - в php5 объекты передаются по ссылке, как и во всех нормальных ОО-языках (исходя из использования private делаю вывод что у тебя php5). Чтобы скопировать объект нужно напрямую воспользоваться оператором clone.
То что ты делаешь (присваиваешь ссылку на экземпляр класса mysqli переменной-члену класса DataPrint) называется делегированием.
зы: а флейм завязываем
Спустя 4 месяца, 17 дней, 22 часа, 29 минут, 25 секунд (3.07.2008 - 12:18) Sylex написал(а):
а может логичней все же создать объект глобальный и его везде юзать? Например:
а методах других классов, например users, писать в начале
и юзать его методы?
Код
$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 будет сохранена ссылка на объект, для дальнейшего обращения к нему, а обращения как и положено будут происходить напрямую.
З.Ы. Конструкция $this->mysqli = $mysqli вообще абсолютно легитимна, в PHP5 объекты изначально передаются по ссылке, иже в $this->mysqli будет сохранена ссылка на объект, для дальнейшего обращения к нему, а обращения как и положено будут происходить напрямую.
_____________