2010-05-27 2 views
2

Мне нужно получить данные, проверить и отправить в db. Программирование с помощью PHP OOP.php oop и mysql

Не могли бы вы рассказать мне, хороша ли моя структура классов и как dislpay все данные ?. Спасибо

<?php 
class Database{ 

    private $DBhost = 'localhost'; 
    private $DBuser = 'root'; 
    private $DBpass = 'root'; 
    private $DBname = 'blog'; 

    public function connect(){ 
     //Connect to mysql db 
    } 

    public function select($rows){ 
     //select data from db 
    } 

    public function insert($rows){ 
     //Insert data to db 
    } 

    public function delete($rows){ 
     //Delete data from db 
    } 
} 

class CheckData{ 

    public $number1; 
    public $number2; 

    public function __construct(){ 
     $this->number1 = $_POST['number1']; 
     $this->number2 = $_POST['number2']; 
    } 

    function ISempty(){ 
     if(!empty($this->$number1)){ 
      echo "Not Empty"; 

      $data = new Database(); 
      $data->insert($this->$number1); 
     } 
     else{ 
      echo "Empty1"; 
     } 

     if(!empty($this->$number2)){ 
      echo "Not Empty"; 

      $data = new Database(); 
      $data->insert($this->$number2); 
     } 
     else{ 
      echo "Empty2"; 
     }  
    } 
} 

class DisplayData{ 

    //How print all data? 
    function DisplayNumber(){ 
     $data = new Database(); 
     $data->select(); 
    } 
} 

$check = new CheckData(); 
$check->ISempty(); 

$display = new DisplayData() 
$display->DisplayNumber(); 
?> 
+0

Структура класса хорошая, однако, один я вижу. Метод «ISempty», вероятно, должен быть «isEmpty», чтобы избежать ошибок других, читающих код. Сначала я думал, что вы ссылаетесь на интерфейс, когда я увидел «ISempty» (интерфейс с именем «Sempty» lol). Кроме того, я бы, вероятно, сам изъявил класс базы данных и сделал его многократным использованием любого проекта (без перекодирования учетных данных db). – Zack

ответ

4

Это ужасный фрагмент кода.

  1. Для связи с базой данных используется PDO. Это не идеально, но все в порядке.
  2. Каждый раз, когда вам понадобится база данных, вы будете связываться с этим db?
  3. Database::insert() и т.д. должны быть настоящим магом, чтобы догадаться, где его параметр должен быть вставлен
+0

@ Gutzofter: Ekhem ... что? – Crozin

1

Вам нужно лучше IDE, чтобы показать свои неопределенные переменные. Я использую PHPStorm.

Вам понадобится dependency injection. Используйте encapsulation. Просто следуйте SOLID.

Во-вторых, не эхо изнутри объектов. Вы не можете unit test эффективно использовать свой код таким образом.

Вы также можете попробовать TDD.

+1

Все очень хорошо, конечно, но учиться за один раз довольно сложно. Я предлагаю сначала изучить инкапсуляцию, так как это часть всех других вещей, которые вы упоминаете. Оттуда следуют модульные испытания, инъекции зависимостей и общие принципы SOLID. Кроме того, NetBeans имеет очень хорошую PHP IDE в эти дни и абсолютно бесплатна. –

+0

Моя предыдущая IDE была/была NetBeans. Storm обрабатывает развертывание в SCM, а также на сервере через ftp. – Gutzofter

+0

О, и бесплатно всегда хорошо. – Gutzofter

1

Вы думаете, что здесь не так. То, что вы создаете, представляет собой оболочку вокруг уже существующих функций базы данных. Дело в том, что те функции, которые уже определены, чтобы сделать именно то, что вы хотите - объектно-ориентированный подход здесь не имеет реальной цели, поскольку он может подключаться только к одной базе данных, а методы не очень четко определены и, по-видимому, действуют как чистые сквозные нижний слой.

Как уже упоминалось, код, который вы, кажется, собираетесь здесь, не подходит для ваших целей. Что-то вроде PDO послужит вам хорошо и уже встроено в PHP. Вам не нужно повторно изобретать колесо для такого общего кода, как доступ к базе данных.

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

Смежные вопросы