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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Первые шаги в ООП [3]

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (3): « 1 2 [3]   

> Описание: ООП первые шаги .
Gamer-X
Отправлено: 01 Августа, 2012 - 15:00:11
Post Id



Новичок


Покинул форум
Сообщений всего: 51
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Изучаю php, дошел до темы классов, понял что и как куда писать, но не особо понял, как это работает в реальных проектах. Написал простейший пример, буквально за 5 минут, поэтому на мелкие косяки не обращайте внимание, суть не в них. Подскажите, верно ли я понимаю суть классов?

<?php
class Db {
global $status;
//id зашедшего на сайт узнали заранее, смотрим его статус
$sql = "SELECT status FROM users WHERE id = $id";
$this->status = mysql_query($sql);
}

class User{
//все данные о пользователе, ну например:
private login, name, pass;
}

class SperUser{
//все данные об админе...
}

class Quest{
//все данные о госте...
// тут наверно просто айпи, сессия и тд...?
}

$conn = new Db();

//создаем юзера в зависимости от статуса зашедшего
switch($conn->status){
case "админ": $user = new SuperUser(); break;
case "юзер": $user = new User(); break;
default: $user = new Quest(); break;
}
?>

ну тут например какая-то html-форма

<?php
if($user istanceOf User) { echo "нет прав для просмотра";};
if($user istanceOf SuperUser) { echo "вы админ";};
if($user istanceOf Quest) { echo "ты кто такой, давай в регистрацию";};
?>

Заранее спасибо за объяснения Улыбка
 
 Top
Bio man
Отправлено: 01 Августа, 2012 - 15:04:00
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Gamer-X пишет:
Quest
Guest Улыбка
Gamer-X пишет:
global $status;
каким боком это туда затосовалось?
Gamer-X пишет:
$sql = "SELECT status FROM users WHERE id = $id";
$this->status = mysql_query($sql);
и почему это не обернуто в метод?
 
 Top
Gamer-X
Отправлено: 01 Августа, 2012 - 15:09:53
Post Id



Новичок


Покинул форум
Сообщений всего: 51
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Bio man пишет:
Gamer-X пишет:
global $status;
каким боком это туда затосовалось?

а как правильно?

а обязательно в метод? хорошо, допустим вызывается метод получения статуса getStatus()..

$conn->getStatus($id)ж
далее тот свич: .......switch(){}

наверно так? дальше что нужно делать?
 
 Top
Bio man
Отправлено: 01 Августа, 2012 - 15:14:14
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




PHP:
скопировать код в буфер обмена
  1. class Db {
  2. //id зашедшего на сайт узнали заранее, смотрим его статус
  3. public function getStatus($id){
  4. $sql = "SELECT status FROM users WHERE id = $id";
  5. $res = mysql_query($sql);
  6. $row = mysql_fetch_row($res);
  7. return $row[0];
  8. }
  9. }

Исправил

(Отредактировано автором: 01 Августа, 2012 - 15:16:39)

 
 Top
Gamer-X
Отправлено: 01 Августа, 2012 - 15:18:01
Post Id



Новичок


Покинул форум
Сообщений всего: 51
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




А.. Ну это конечно, это я очень грубо опустил, не стал выделываться Улыбка но всё же спасибо! Но вопрос немного в другом - а вообще ход мыслей верен? Ну вот хочу я вывести фразу, нужно узнать статус, он узнается так-то через класс. Всё правильно? Или нет?
 
 Top
Bio man
Отправлено: 01 Августа, 2012 - 15:21:44
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




А можно ход мыслей словами и понятно а не какими то классами?
 
 Top
Gamer-X
Отправлено: 01 Августа, 2012 - 15:26:25
Post Id



Новичок


Покинул форум
Сообщений всего: 51
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




Например есть страница - анкета пользователя. Мне нужно вывести имя, логин, дата рождения и прочее... Есть кнопки всякие - репутация там, личные сообщения... Если Админ, то кнопочки управления (предположим удалить анкету), а если гость - чтобы не видел кнопочки "написать личное сообщение".
Вот на этом примере хотелось бы понять, как грамотно их делать и особенно как использовать по ходу создания анкеты.
 
 Top
Bio man
Отправлено: 01 Августа, 2012 - 15:52:21
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


Помог: 52 раз(а)




Для начала ознакомься с этим:

Вообще класс это чертеж по которому можно создать объект.
Например с чертежа ракеты можно создать ракету.
В ООП все есть объект (в идеале).
В ООП очень важны АТД (абстрактные типы данных). Например, есть АТД User, этот User может быть гостем, админом, редактором итд. Это пример, не принимай как должное.

Но что представляет из себя класс? Класс это набор методов и свойств для решения определенных задач. Ну это и так понятно.
У класса есть интерфейс (методы), которые выполняют какие то действия с данными-членами (свойствами), отвечает на вопрос что сделать, например, getStatus(), setStatus(), render() итд.


Затем выдели абстракции.
Я помогу. Это будет:
User и DB
Вместо DB посоветую использовать встроенное решение - PDO.

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. class User {
  3.         private $data;
  4.        
  5.         public function __construct($id){
  6.                 $this->data = DB()->query("SELECT * FROM `users` WHERE `id` = $id")->fetch(PDO::FETCH_ASSOC)
  7.         }
  8.         public function getData(){
  9.                 return $this->data;
  10.         }
  11.         public function getStatus(){
  12.                 return $this->data['status'];
  13.         }
  14. }
  15. // функция синглтона
  16. function DB {
  17.         static $instance = NULL;
  18.         if($instance === NULL)
  19.                 $instance = new PDO("mysql:host=localhost;dbname=xxx", 'root', 'pass');
  20.         return $instance;
  21. }
  22.  
  23. // сама анкета в процедурном стиле
  24. $rUser = new User(1);
  25. $rgUserData = $rUser->getData();
  26. $sStatus = $rUser->getStatus();
  27.  
  28. // данные получены, осталось их оформить...

Изучай.

ЗЫ код может работать не корректно, не проверял
 
 Top
Gamer-X
Отправлено: 01 Августа, 2012 - 16:32:21
Post Id



Новичок


Покинул форум
Сообщений всего: 51
Дата рег-ции: Сент. 2010  


Помог: 0 раз(а)




огромное спасибо) (кол-во сообщений не позволяет тыкнуть "спасибо", но урок очень важен Улыбка )
 
 Top
Страниц (3): « 1 2 [3]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB