Нужен совет пофессионалов своего дела

Krishna

Продался Java
Я ему посоветовал более-менее подходящий под задачу паттерн.
Какой нафиг паттерн, когда он не понимает разницы между методами и классами? Он тебя спрашивает как колесо правильно надеть на тележку, а ты ему пытаешься объяснить чем хорош турбодизель для езды по бездорожью и что неплохо бы ему его создание освоить. Не в коня ведь корм, очевидно!
 

Fortop

Новичок
triumvirat
ТС, свою конкретную задачу регистрации, как я понимаю, уже решил процедурно. И хочет изучить ООП на ее примере.

А какая у Вас конкретная задача, я несколько в недоумении.
Поспорить со мной? Зачем?

Поэтому повторюсь, ТС нужно понимание ООП. Не паттерна, не конкретной задачи, и именно подхода.
Паттерны - замечательная вещь, но лучше, когда, читая об очередном паттерне, ты думаешь - так вот как называется штука, которую я сделал.
Т.е. изучение через необходимость.

Я прекрасно понимаю Ваше восхищение только что открытым для себя ActiveRecord. Но это не единственный паттерн для DBAL. Поэтому рекомендую также обратить внимание на Table Data Gateway, Row Data Gateway, Data Mapper

Автор оригинала: triumvirat
блин, да где это написано? Чье это авторитетное мнение?
Это было чуть выше написано, мной. А Вы к логике не прислушиваетесь? Вас надо только по голове канделябром(авторитетом)?

Я человек и могу ошибаться. Поэтому если Вы приведете аргументы, почему AR проще в понимании чем Синглтон, то, возможно, я смогу понять Вас.
 

HraKK

Мудак
Команда форума
лучше, когда, читая об очередном паттерне, ты думаешь - так вот как называется штука, которую я сделал.
+100

-~{}~ 13.02.10 21:31:

triumvirat
Тебе Fortop все верно говорит, прислушайся. У вас наверно произошло расхождение в понимании кто и чем хочет помочь.
 

Духовность™

Продвинутый новичок
Я прекрасно понимаю Ваше восхищение только что открытым для себя ActiveRecord. Но это не единственный паттерн для DBAL. Поэтому рекомендую также обратить внимание на Table Data Gateway, Row Data Gateway, Data Mapper
Молодой человек, я прекрасно знаю и понимаю эти паттрны и прекрасно знаю их плюсы и минусы. Не надо тут делать скороспешные выводы и рассуждать, кто и когда открыл для себя паттерны. Я тоже могу сказать, что Вы только вчера начали программировать.

Я человек и могу ошибаться. Поэтому если Вы приведете аргументы, почему AR проще в понимании чем Синглтон, то, возможно, я смогу понять Вас.
Причем тут понимание? Человек решает КОНКРЕТНУЮ задачу. Я посоветовал паттерн под конкретную задачу. Вы посоветовали начать изучение с сингелтона, фабрики и регистра. Какая связь между регистрацией и всем вышеперечисленным? Вы хотите поумничать и направит ТС в неверном направлении? Поздравляю, у вас это получилось.

изучение через необходимость.
этим мы и пытались заниматься, пока сюда не сунулись умники и не начали демагогию. Бессмысленную, дурную демагогию. "Это тебе не надо", "ты не дорос" и т.д. Осталось подождать, как придет какой-нибудь совсем приумный гуру и посоветует программировать на SmallTalk, а к PHP вернуться через 10 лет.

А между тем, ТС нужен реальный опыт. Ему нужно показать один простой пример того, как надо делать. И все. До остального он сам дойдет, читал специфическую литературу более углубленно.
 

Fortop

Новичок
Автор оригинала: triumvirat
Молодой человек,
Вас не смущает, что Вы моложе меня? ;)

Автор оригинала: triumvirat Я тоже могу сказать, что Вы только вчера начали программировать.
И Вы будете весьма недалеки от истины. Но разве это отменяет логику того, что я пытаюсь Вам донести?

Автор оригинала: triumvirat Я посоветовал паттерн под конкретную задачу. Вы посоветовали начать изучение с сингелтона, фабрики и регистра. Какая связь между регистрацией и всем вышеперечисленным?
Я попросил бы Вас перечитать то, что я писал. Вы явно думаете о чем-то своем.

P.S. Свою первую программу я написал 21 год назад. Свою первую программу для предприятия я написал 15 лет назад.
Тем не менее стаж в качестве программиста у меня всего около года. Поэтому можно смело считать, что я начал программировать вчера


На остальное, извините, отвечать лень.
 

HraKK

Мудак
Команда форума
Короче все оба успокоились и остудили пар. Вы сейчас уперлись рогами и все, никто не сдвинется. Забейте, делать вам больше нечего, а тему закрывать неохота, может автор еще позадает вопросы.
 

fixxxer

К.О.
Партнер клуба
Первое предложение в стартовом посте треда:

Я недавно начал изучать ООП соответственно появляются вопросы.
Человек хочет изучить ООП. Если бы человек сказал "мне надо тут по быстрому регистрацию и авторизацию сделать", ему давали бы совсем иные советы :)

А _изучать_ надо начинать не с паттернов, а с осмысления парадигмы. Паттерны без понимания основ объектного дизайна приводят к такому трындецу который в сто раз хуже чем студенческий код лапшой.
 

C_TIGER

Новичок
boko
запомни главное - нельзя писать ООП ради ООП.
исходя из этого вопрос заданный в сабже не должен у тебя возникать впринципе =)

и почтай про ООП php5
 

AmdY

Пью пиво
Команда форума
я как-то пример работы с формами закрутил примерно в десяток классов. очень полезный опыт.
 

boko

Новичок
Доброй ночи вот создал класс для работы с базой, прошу Вас посмотреть и указать на ошибки. Класс работает. Но реализация и т.д правильна?

Спасибо большое .

PHP:
class Db {
	
		private $db_host;
		private $db_user;
		private $db_pswd;
		private $db_name;
		private $result;
		private $sql;
		private $mysql_link = 0;
		
public function __construct($db_host,$db_user,$db_pswd,$db_name)
		{
		 $this->db_host = $db_host;
		 $this->db_user = $db_user;
		 $this->db_pswd = $db_pswd;
		 $this->db_name = $db_name;
		 
		 $this->mysql_link = mysql_connect($this->db_host, $this->db_user, $this->db_pswd);
		 mysql_query("SET NAMES 'utf8'",$this->mysql_link);
	     mysql_select_db($this->db_name, $this->mysql_link) or die(mysql_error($this->mysql_link)); 
		}

public function Query($q)
		{
		$this->sql = $q; 	
		}
		
public	function Select($type)
		{
		
		 $this->result = mysql_query($this->sql,$this->mysql_link);
		 
			switch ($type) 
			{
				case "assoc":
				while($res = mysql_fetch_assoc($this->result))
						{
							$data[] = $res;
						}
		 					return $data;
							break;
					
				case "rows":
					return  mysql_num_rows($this->result);
					
					break;
					
					
				case "one":
       			               return mysql_fetch_assoc($this->result);
					break;
				
			}
		 
		}
		
	public function Insert()
		{
		 $this->result = mysql_query($this->sql,$this->mysql_link);		
		}
			
	public function Update()
		{
		
	    $this->result = mysql_query($this->sql,$this->mysql_link);		
		}
		
   
		
	public function __destruct() {
		@mysql_close($this->mysql_link);
        unset($this->sql);
        unset($this->result);
    }
}
 

Adelf

Administrator
Команда форума
PHP:
public function Query($q)
        {
        $this->sql = $q;     
        }
        
public    function Select($type)
        {
         $this->sql = $q;
Последняя строка тут какаято странная :) Скорее всего она не нужна. Да и класс получился очень неудобный и малополезный.
 

boko

Новичок
ну тут он так вызывается:

PHP:
$db->Query("INSERT INTO phpml_members (firstname) VALUES ('Vasia')");
$db->Insert();
Поэтому я и вставил такую конструкцию
PHP:
public function Query($q)
		{
		$this->sql = $q; 	
		}
 

boko

Новичок
А ну да просто иначально я так сделал в каждом методе писал
PHP:
$this->sql = $q;
Потом покурил и создал

PHP:
public function Query($q)
        {
        $this->sql = $q;     
        }
Уже исправил :)

П.С - А вот ещё вижу бесполезность INSERT UPDATE выполняют одно и тоже посути

Надо удалить оба метода, и создать один с каким нибудь именем.

Класс пишу чисто под проект.
 

Духовность™

Продвинутый новичок
Класс работает. Но реализация и т.д правильна?
не правильна. посмотри, как обычно делают такие классы, посмотри их API.

Если вкратце, то query должен возвращать объект результата, который имеет методы типа assoc, row, one.

Класс должен обеспечивать механизм, при котором поступающие значения автоматически бы эскейпились и приводились к нужному типу:
PHP:
$this->db->query('UPDATE `table` SET `myvalue` = "?s" WHERE `id` = ?i', $value, $id);
Update и Insert - это функции скорее для следующего слоя в твоем коде.

в конструкторе у тебя тыща операций. привыкай, что каждый метод делать должен минимальное количество вещей.

класс для работы с БД должен быть типа одиночка.

PS: Вот мой класс
 

Beavis

Banned
Автор оригинала: triumvirat
не правильна. посмотри, как обычно делают такие классы, посмотри их API.
...
класс для работы с БД должен быть типа одиночка.
и часто ты видел такие классы в виде "одиночек"?)
 
Сверху