Спустя 4 минуты, 59 секунд (7.07.2011 - 14:33) Winston написал(а):
А зачем тебе класс для insert'a? Мне кажется там одного метода хватит?
Цитата (m4a1fox @ 7.07.2011 - 14:28) |
Подскажите, у кого есть время и терпение, буду весьма признателен!? |
И я присоединюсь т.к. мне тоже интересно, как это правильно сделать.
Спустя 5 минут, 19 секунд (7.07.2011 - 14:39) m4a1fox написал(а):
PHPprogramer
Как я понимаю, метод - это не функция, значит если Вы написали слово метод, то я на автомате принимаю это, как то, что есть class.
Вот собственно класс, кот. у меня есть
Как я только что понял, это не верно, необходимо все писать в одном классе... так же получается? А потом просто вытаскивать методы и все...
Как я понимаю, метод - это не функция, значит если Вы написали слово метод, то я на автомате принимаю это, как то, что есть class.
Вот собственно класс, кот. у меня есть
class Member extends connect_Db {
function return_user() {
$sql = "SELECT * FROM `login`";
$res = $this->sql($sql);
return $res;
}
}
class showLogin extends Member {
function show_user() {
$res = $this->return_user();
if(mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res)) {
$name[] = $row;
}
} else {
echo 'String in db is empty';
}
return $name;
}
}
$user = new showLogin;
Как я только что понял, это не верно, необходимо все писать в одном классе... так же получается? А потом просто вытаскивать методы и все...
Спустя 6 минут, 12 секунд (7.07.2011 - 14:45) neadekvat написал(а):
А я вот не понимаю, что вы хотите сделать.
Чем вас не устраивает mysql_query("INSERT INTO ...") ? А если устраивает - то как-то подробнее надо описывать, зачем вам класс и что вы от него хотите.
Чем вас не устраивает mysql_query("INSERT INTO ...") ? А если устраивает - то как-то подробнее надо описывать, зачем вам класс и что вы от него хотите.
Спустя 28 секунд (7.07.2011 - 14:45) Winston написал(а):
Цитата (m4a1fox @ 7.07.2011 - 14:39) |
Как я только что понял, это не верно, необходимо все писать в одном классе... так же получается? А потом просто вытаскивать методы и все... |
Как мне кажется то это не верно. Для каждого метода свой класс писать :D ???
Почему бы так не написать ?
Свернутый текст
class Member extends connect_Db {
public function return_user() {
$sql = "SELECT * FROM `login`";
$res = parent :: sql($sql);
return $res;
}
public function show_user() {
$res = $this->return_user();
if(mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res)) {
$name[] = $row;
}
} else {
echo 'String in db is empty';
}
return $name;
}
}
$member = new Member;
echo $member -> return_user();
echo $member -> show_user();
И в дочернем классе я думаю вместо такого $this->sql($sql);
Лучше писать так parent :: sql($sql);
Чтобы было сразу видно что к чему
Спустя 11 минут, 27 секунд (7.07.2011 - 14:57) tatti написал(а):
вот тоже интересно можно ли как-то допустим по колл.элементов массива, определить имена колонок в таблице, чтоб ну вообще под всё подходило?
Спустя 1 минута, 19 секунд (7.07.2011 - 14:58) neadekvat написал(а):
PHPprogramer, не соглашусь.
Я вообще против наследования классов, состоящий только из настроек подключений и классов работы с базой данных.
Это же разные сущности. Один класс работает с базой данных, а второй класс работает с пользователями. И вот второй класс просто пользуется услугами первого. Поэтому надо либо делать методы класс работы с бд статическими (лучше так), либо передавать объект этого класса в конструктор другим классам.
Я вообще против наследования классов, состоящий только из настроек подключений и классов работы с базой данных.
Это же разные сущности. Один класс работает с базой данных, а второй класс работает с пользователями. И вот второй класс просто пользуется услугами первого. Поэтому надо либо делать методы класс работы с бд статическими (лучше так), либо передавать объект этого класса в конструктор другим классам.
Спустя 1 минута, 39 секунд (7.07.2011 - 15:00) m4a1fox написал(а):
PHPprogramer
Поддерживаю... вот так оформил
Для вас neadekvat, меня полностью устраивает
Поддерживаю... вот так оформил
class showLogin extends connect_Db {
function return_user() {
$sql = "SELECT * FROM `login`";
$res = $this->sql($sql);
return $res;
}
function show_user() {
$res = $this->return_user();
if(mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res)) {
$name[] = $row;
}
} else {
echo 'String in db is empty';
}
return $name;
}
}
$user = new showLogin;
Для вас neadekvat, меня полностью устраивает
Цитата |
mysql_query("INSERT INTO ...") |
Я сейчас хочу потихоньку в ооп разобраться. По сути, надо понять 4 метода:
- 1. Выбрать
- 2. Обновить
- 3. Занести
- 4. Удалить
Класс, как выбрать - это я понял. Следующий на очереди - класс Занести.
Спустя 1 минута, 8 секунд (7.07.2011 - 15:01) m4a1fox написал(а):
neadekvat
Цитата |
Поэтому надо либо делать методы класс работы с бд статическими (лучше так) |
Вот так и буду делать.
Спустя 1 минута, 50 секунд (7.07.2011 - 15:03) neadekvat написал(а):
Цитата (m4a1fox @ 7.07.2011 - 16:01) |
Вот так и буду делать. |
При этом наследовать ничего не надо.
Спустя 7 минут, 17 секунд (7.07.2011 - 15:10) m4a1fox написал(а):
neadekvat
Цитата |
При этом наследовать ничего не надо. |
А вот с этим проблемка.... а как тогда подключение к БД?
Спустя 5 минут, 13 секунд (7.07.2011 - 15:15) Winston написал(а):
Цитата (m4a1fox @ 7.07.2011 - 15:10) |
А вот с этим проблемка.... а как тогда подключение к БД? |
Написать класс, создать объект, вот и будет тебе подключение.
Спустя 8 минут, 41 секунда (7.07.2011 - 15:24) m4a1fox написал(а):
PHPprogramer
ну так тоже можно, но я наследованием решил сделать?!
ну так тоже можно, но я наследованием решил сделать?!
Спустя 59 секунд (7.07.2011 - 15:25) Winston написал(а):
Ну говорят же что наследование здесь не нужно.
Спустя 6 минут, 50 секунд (7.07.2011 - 15:32) m4a1fox написал(а):
PHPprogramer
Знаю, что говорят. Тогда как без наследования?!
Вот класс для соединения с БД
класс настроек default.php
И соббственно класс select'a
Объясните, как туту быть без наследования?!
Знаю, что говорят. Тогда как без наследования?!
Вот класс для соединения с БД
private $connection;
function __construct() {
$this->open_connection();
//echo "Connection is set";
}
private function open_connection() {
$this->connection = mysql_connect($this->DB_HOST, $this->DB_USER, $this->DB_PASS);
if(!$this->connection) {
die("Database connection faild: ".mysql_error());
}
else {
$db_select = mysql_select_db($this->DB_NAME);
if(!$db_select) {
die ("Database selected faild: ".mysql_error());
}
}
mysql_query("set names utf8") or die ("set names utf8 faild");
}
public function sql ($query) {
$result = mysql_query($query, $this->connection);
if(!result) {
die("Database query failed: ".mysql_error());
}
return $result;
}
}
$db = new connect_Db;
класс настроек default.php
class defaultVar extends Debug {
var $BASE_URL = "localhost/oop";
var $DB_HOST = "localhost";
var $DB_USER = "user";
var $DB_PASS = "";
var $DB_NAME = "oop";
}
И соббственно класс select'a
class showLogin extends connect_Db {
private function return_user() {
$sql = "SELECT * FROM `login`";
$res = $this->sql($sql);
return $res;
}
function show_user() {
$res = $this->return_user();
if(mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res)) {
$name[] = $row;
}
} else {
echo 'String in db is empty';
}
return $name;
}
}
$user = new showLogin;
Объясните, как туту быть без наследования?!
Спустя 7 минут, 29 секунд (7.07.2011 - 15:39) Winston написал(а):
Мне кажется, что метод sql в классе соединение вообще не к месту.
Цитата (m4a1fox @ 7.07.2011 - 15:32) |
класс настроек default.php |
Зачем создавать класс настроек, если можно создать файл в котором хранить константы HOST, USER и т.д. и при создании объекта передавать их в конструктор класса соединения.
Спустя 1 минута, 3 секунды (7.07.2011 - 15:40) m4a1fox написал(а):
PHPprogramer
Согласен! Попробую переделать!?
Согласен! Попробую переделать!?
Спустя 3 минуты, 35 секунд (7.07.2011 - 15:44) neadekvat написал(а):
Цитата (m4a1fox @ 7.07.2011 - 16:32) |
Объясните, как туту быть без наследования?! |
Любой код больше 50-ти строк можно написать как минимум двумя способами. Умей отказывать от своего кода и видеть другие варианты.
class db
{
protected $BASE_URL = "localhost/oop";
protected $DB_HOST = "localhost";
protected $DB_USER = "user";
protected $DB_PASS = "";
protected $DB_NAME = "oop";
protected static $connection;
function __construct() {
if ( ! self::$connection)
$this->open_connection();
//echo "Connection is set";
}
private function open_connection() {
$this->connection = mysql_connect($this->DB_HOST, $this->DB_USER, $this->DB_PASS);
if(!$this->connection) {
die("Database connection faild: ".mysql_error());
}
else {
$db_select = mysql_select_db($this->DB_NAME);
if(!$db_select) {
die ("Database selected faild: ".mysql_error());
}
}
mysql_query("set names utf8") or die ("set names utf8 faild");
}
public static function sql ($query) {
$result = mysql_query($query, $this->connection);
if(!result) {
die("Database query failed: ".mysql_error());
}
return $result;
}
}
$db = new db;
class showLogin
{
private function return_user() {
$sql = "SELECT * FROM `login`";
$res = db::sql($sql);
return $res;
}
public function show_user() {
$res = $this->return_user();
if(mysql_num_rows($res) > 0) {
while($row = mysql_fetch_assoc($res)) {
$name[] = $row;
}
} else {
echo 'String in db is empty';
}
return $name;
}
}
$user = new showLogin;
Спустя 3 минуты, 43 секунды (7.07.2011 - 15:48) Winston написал(а):
Здесь обращаешься к статической переменной.
Цитата (neadekvat @ 7.07.2011 - 15:44) |
( ! self::$connection) |
А здесь нет
Цитата (neadekvat @ 7.07.2011 - 15:44) |
$this->connection |
Почему так ?
Спустя 5 минут, 15 секунд (7.07.2011 - 15:53) neadekvat написал(а):
PHPprogramer, потому что я лишь показал, как использовать без наследования, но весь код не перечитывал.
Верно будет обращаться как к статическим данным.
Верно будет обращаться как к статическим данным.
Спустя 4 минуты, 17 секунд (7.07.2011 - 15:57) m4a1fox написал(а):
neadekvat
Да и как к статической, все равно ошибка?!
Спустя 1 минута, 59 секунд m4a1fox написал(а):
А ну ка... для меня тупого, чем плохо наследование?!
Да и как к статической, все равно ошибка?!
Спустя 1 минута, 59 секунд m4a1fox написал(а):
А ну ка... для меня тупого, чем плохо наследование?!
Спустя 12 минут, 4 секунды (7.07.2011 - 16:09) neadekvat написал(а):
Цитата (m4a1fox @ 7.07.2011 - 16:57) |
Да и как к статической, все равно ошибка?! |
Я же сказал - это пример. Код прошерсти и исправь.
Цитата (m4a1fox @ 7.07.2011 - 16:57) |
А ну ка... для меня тупого, чем плохо наследование?! |
Оно не плохо. Оно хорошо. Вообще все хорошо, когда к месту. Здесь не к месту. Это я уже объяснял.
Цитата (neadekvat @ 7.07.2011 - 15:58) |
Это же разные сущности. Один класс работает с базой данных, а второй класс работает с пользователями. И вот второй класс просто пользуется услугами первого |
Спустя 1 час, 6 минут, 28 секунд (7.07.2011 - 17:16) m4a1fox написал(а):
В общем где то бред но он работает :)
function insert_user($post) {
$sql = "INSERT INTO `login` SET `name` = '".$post['name']."',
`pass` = '".$post['pass']."',
`encode` = '".$post['email']."'
";
//echo $sql;
$this->sql($sql);
return true;
}
Спустя 2 минуты, 49 секунд (7.07.2011 - 17:18) neadekvat написал(а):
*всплеснул руками*
Цитата (m4a1fox @ 7.07.2011 - 18:16) |
$this->sql($sql); |
Это говорит о прямом наследовании.
Как об стену горох.
Спустя 2 минуты, 20 секунд (7.07.2011 - 17:21) m4a1fox написал(а):
neadekvat
А как тогда?????????? Я уже в догадках теряюсь?!
А как тогда?????????? Я уже в догадках теряюсь?!
Спустя 2 минуты, 6 секунд (7.07.2011 - 17:23) neadekvat написал(а):
Цитата (m4a1fox @ 7.07.2011 - 18:21) |
А как тогда?????????? Я уже в догадках теряюсь?! |
Я показал, как. Там нет наследования. Нет! Но надо заменить обращения внутри класса бд на self::, а обращения к этому классу из класса работы с пользователями на db::sql
Спустя 1 минута, 46 секунд (7.07.2011 - 17:25) m4a1fox написал(а):
neadekvat
Спасибо вам огромное за подсказки и терпение, но мне кажется, так как вы предложили для меня еще очень сложно.... извините.
Спасибо вам огромное за подсказки и терпение, но мне кажется, так как вы предложили для меня еще очень сложно.... извините.
Спустя 9 минут, 29 секунд (7.07.2011 - 17:34) neadekvat написал(а):
Цитата (m4a1fox @ 7.07.2011 - 18:25) |
Спасибо вам огромное за подсказки и терпение, но мне кажется, так как вы предложили для меня еще очень сложно.... извините. |
Я тебе скажу один вещь, ты только не обижайся.
Если для тебя то, что я объясняю, сложно - то рано тебе вообще в ООП лезть.
Ты не можешь сделать обычную, элементарную связь между классами, но уже лезешь в наследование! Нельзя так. Оставь ты ООП пока. Начни с азов, а не с Ирбиса или форума.
Спустя 5 минут, 20 секунд (7.07.2011 - 17:39) m4a1fox написал(а):
neadekvat
хорошо! Наверно так и сделаю!
хорошо! Наверно так и сделаю!
Спустя 16 минут, 52 секунды (7.07.2011 - 17:56) ИНСИ написал(а):
neadekvat по твоему коду, немного комментов:
1. Подключение к БД лучше вывести с класса в константы, либо переменные.
2. Для вывода ошибок лучше сделать отдельный метод.
3. Сделать возможность управлять выводом ошибок.
m4a1fox не стоит бросать, просто надо прислушиваться к более опытным (имею в виду с чего начинать), а не лезть сразу в сложные моменты
А как тогда ты выучишь ООП, если не будешь пытаться учить и тестить? Дерзай!
1. Подключение к БД лучше вывести с класса в константы, либо переменные.
2. Для вывода ошибок лучше сделать отдельный метод.
3. Сделать возможность управлять выводом ошибок.
m4a1fox не стоит бросать, просто надо прислушиваться к более опытным (имею в виду с чего начинать), а не лезть сразу в сложные моменты
А как тогда ты выучишь ООП, если не будешь пытаться учить и тестить? Дерзай!