Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: ООП пытаюсь писать
Форумы портала PHP.SU » » Объектно-ориентированное программирование » ООП пытаюсь писать

Страниц (5): [1] 2 3 4 5 »
 

1. Hapson - 24 Июля, 2013 - 23:40:47 - перейти к сообщению
Ну вот очередные мои потуги понять ООП и начать-таки писать блог именно на ООП. Уже начал писать на функциях, но все же хочу ООП.
Вот небольшой набросок, как оно примерно будет (будет ли...)
Это похоже на ООП?
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // это файл типа config.php
  3. define('DB_SERVER', 'localhost');
  4. define('DB_LOGIN', 'root');
  5. define('DB_PASSWORD', 'password');
  6. define('DB_NAME', 'myuser');
  7.  
  8. //классы будут каждый в отдельном файле + будет файлик с __autoload()
  9. class DB{
  10.         private $id_connect;
  11.         private static $db = NULL;
  12.        
  13.         static function getDB(){
  14.                 if(self::$db == NULL){
  15.                         self::$db = new DB();
  16.                 }
  17.                 return self::$db;
  18.         }
  19.         private function __construct(){
  20.                 $this->id_connect = new mysqli(DB_SERVER, DB_LOGIN, DB_PASSWORD, DB_NAME);
  21.                 $this->id_connect->query("SET lc_time_names = 'ru_RU'");
  22.                 $this->id_connect->set_charset("utf8");
  23.         }
  24.         function select($sql){
  25.                 $query = $this->id_connect->query($sql);
  26.                 $result = mysqli_fetch_all($query);
  27.                 return $result;
  28.         }
  29.         function insert($sql){
  30.                 $query = $this->id_connect->query($sql);
  31.                 $result = $this->id_connect->affected_rows;
  32.                 return $result;
  33.         }
  34.         public function __destruct() {
  35.                 if ($this->id_connect) $this->id_connect->close();
  36.         }
  37. }
  38. class Users{
  39.         public $name;
  40.         public $password;
  41.        
  42.         function __construct($name, $password){
  43.                 $this->name = $name;
  44.                 $this->password = $password;
  45.         }
  46.         function register(){
  47.                 $db = DB::getDB();
  48.                 $result = $db->insert("INSERT INTO user (name, password) VALUES ('$this->name', '$this->password')");
  49.                 return $result;
  50.         }
  51.         function get_info($col, $table){
  52.                 $db = DB::getDB();
  53.                 $result = $db->select("SELECT $col FROM $table");
  54.                 return $result;
  55.         }
  56. }
  57. class Articles{
  58.         public $article;
  59.         public $title;
  60.         public $description = '';
  61.         public $keywords = '';
  62.        
  63.         function __construct($article, $title, $description, $keywords){
  64.                 /*
  65.                 ** здесь данные пойдут в class Cleaner{} наверное, и вернутся безопасными для вставки
  66.                 */
  67.                 $this->article = $article;
  68.                 $this->title = $title;
  69.                 $this->description = $description;
  70.                 $this->keywords = $keywords;
  71.         }
  72.         function save(){
  73.                 $db = DB::getDB();
  74.                 $result = $db->insert("INSERT INTO articles (article, title, description, keywords) VALUES ('$this->article', '$this->title, $this->description, $this->keywords')");
  75.                 return $result;
  76.         }
  77.         function show(){
  78.                 $db = DB::getDB();
  79.                 $result = $db->select("SELECT $col FROM $table");
  80.                 return $result;
  81.         }
  82. }
  83. $user = new Users('Вася', 'Пароль');
  84. var_dump($user->register());//число вставленных строк
  85. $user_info = $user->get_info('name, password', 'user');
  86. echo "<pre>";
  87. var_dump($user_info);//двумерный массив юзеров
  88. echo "</pre>";
  89. ?>
2. esterio - 25 Июля, 2013 - 00:00:59 - перейти к сообщению
читаем что такое "инкапсуляция"
3. Hapson - 25 Июля, 2013 - 00:18:07 - перейти к сообщению
esterio пишет:
читаем что такое "инкапсуляция"

Читал.
Как я понял, это когда мне грубо говоря по боку, что делается внутри класса.
Но что-то я не очень это понимаю...
Что здесь не так?
(Добавление)
esterio пишет:
читаем что такое "инкапсуляция"

Или вы имеете ввиду, что здесь нет обработки ошибок. И свойства public? И наверное нет абстрактных классов и интерфейсов?
Я так понимаю, свойства должны быть private, а методы public? Ну и плюс отлов ошибок, запись их в лог и информирование пользователей в удобной форме?
4. DeepVarvar - 25 Июля, 2013 - 00:32:08 - перейти к сообщению
Hapson пишет:
это когда мне грубо говоря по боку
Ты не так понял, верный ответ звучит как: Это когда классу по боку что происходит снаружи, потому, что его внутренности не доступны извне и поэтому ему никто не навредит.
(Добавление)
Hapson пишет:
свойства должны быть private, а методы public?
Вообще не обязательно именно так.
Надо четко представлять что приват а что паблик, например если метод "сходить в туалет" сделать публичным, ничего хорошего из этого не получится..
5. Hapson - 25 Июля, 2013 - 00:41:00 - перейти к сообщению
DeepVarvar пишет:
Hapson пишет:
это когда мне грубо говоря по боку
Ты не так понял, верный ответ звучит как: Это когда классу по боку что происходит снаружи, потому, что его внутренности не доступны извне и поэтому ему никто не навредит.
(Добавление)
Hapson пишет:
свойства должны быть private, а методы public?
Вообще не обязательно именно так.
Надо четко представлять что приват а что паблик, например если метод "сходить в туалет" сделать публичным, ничего хорошего из этого не получится..

Ну да)))
Ну вот в данном, упрощенном примере. К примеру, в классе Users свойства будут приват (они мне в принципе и не нужны в виде паблик), а методы регистрации, аутентификации, изменения профиля и тд - это все паблик.
6. soffrick - 25 Июля, 2013 - 08:39:03 - перейти к сообщению
Hapson пишет:
регистрации, аутентификации, изменения профиля и тд - это все паблик.

+отдельные методы проверки - приват
7. EuGen - 25 Июля, 2013 - 09:20:38 - перейти к сообщению
Hapson пишет:
Это похоже на ООП?

Нет.
8. Hapson - 25 Июля, 2013 - 14:23:33 - перейти к сообщению
EuGen пишет:
Hapson пишет:
Это похоже на ООП?

Нет.

Содержательно
9. soffrick - 25 Июля, 2013 - 14:26:16 - перейти к сообщению
Hapson
прежде чем писать ооп что читал?
10. Hapson - 25 Июля, 2013 - 14:29:02 - перейти к сообщению
soffrick пишет:
Hapson
прежде чем писать ооп что читал?

Котерова читал и смотрел все курсы Специалист.
(Добавление)
EuGen
А как оно должно быть? Что не так у меня?
Юзеры, статьи, БД... - это ведь сущности.
11. EuGen - 25 Июля, 2013 - 14:46:58 - перейти к сообщению
Hapson
Ваш вопрос был односложен, следовательно, на него может быть дан только односложный ответ.
Hapson пишет:
А как оно должно быть? Что не так у меня?

- это уже другой вопрос, ответ на который многие годы пытаются дать различные специалисты. Я могу сказать лишь то, что нельзя понять объектный подход, пытаясь рассматривать лишь реализацию. ООП - это подход, парадигма. Иными словами, это набор постулатов и правил, и каждый конкретный язык программирования по-своему их реализует. Каждый программист по-своему реализует в коде этот подход. В зависимости от того, следует ли код принципам ООП, он может быть назван "код, использующий объектный подход" - либо нет.
Поэтому, резюмируя - следует изучать не только реализацию, а так же и сами принципы ООП, поскольку это - идея, теоретическая установка. Как лучше её реализовать - вопрос трудный, ответ на него приходит с опытом.
12. Hapson - 25 Июля, 2013 - 14:52:50 - перейти к сообщению
EuGen пишет:
Hapson
Ваш вопрос был односложен, следовательно, на него может быть дан только односложный ответ.
Hapson пишет:
А как оно должно быть? Что не так у меня?

- это уже другой вопрос, ответ на который многие годы пытаются дать различные специалисты. Я могу сказать лишь то, что нельзя понять объектный подход, пытаясь рассматривать лишь реализацию. ООП - это подход, парадигма. Иными словами, это набор постулатов и правил, и каждый конкретный язык программирования по-своему их реализует. Каждый программист по-своему реализует в коде этот подход. В зависимости от того, следует ли код принципам ООП, он может быть назван "код, использующий объектный подход" - либо нет.
Поэтому, резюмируя - следует изучать не только реализацию, а так же и сами принципы ООП, поскольку это - идея, теоретическая установка. Как лучше её реализовать - вопрос трудный, ответ на него приходит с опытом.

Понятно.
Ну так с чего-то начинать ведь нужно. Как можно понять, если не делать. Ну вот я вижу это пока вот так. Можно сказать с точки зрения реализации.
Для начала ведь пойдет так. Потом думаю пойму, что не так и как сделать лучше.
Ну что еще можно придумать для блога? Это будет просто блог. Будут категории, статьи, комментарии. Ну и пользователи.
13. caballero - 25 Июля, 2013 - 15:31:51 - перейти к сообщению
Цитата:
Цитата:
А как оно должно быть? Что не так у меня?
Юзеры, статьи, БД... - это ведь сущности.


БД - не сущность.
ООП это способ мышления преджде всего. В том числе и понимани где сущность а где нет.
14. Hapson - 25 Июля, 2013 - 15:58:54 - перейти к сообщению
caballero пишет:
БД - не сущность.

Ну в прямом смысле да - это не сущность. Но ведь это объект программы, который работает независимо от кода php. Через php мы только взаимодействуем с этим объектом.
БД - это другая программа, это в конце концов файлы с данными на физическом диске.
(Добавление)
PS
У БД нет свойств, но с ней нужно работать. Поэтому, я думаю, класс для работы с БД не лишний.
15. soffrick - 25 Июля, 2013 - 16:11:06 - перейти к сообщению

Hapson пишет:
У БД нет свойств

PHP:
скопировать код в буфер обмена
  1. define('DB_SERVER', 'localhost');
  2. define('DB_LOGIN', 'root');
  3. define('DB_PASSWORD', 'password');
  4. define('DB_NAME', 'myuser');

поэтому?

 

Powered by ExBB FM 1.0 RC1