• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

obiektowe zapytania do bazy danych (w końcu się udało)

0 głosów
904 wizyt
pytanie zadane 6 września 2015 w Nasze projekty przez makoso Mądrala (7,380 p.)

Kilka razy pytałem, próbowałem, nic nie wychodziło, no i w końcu się udało pytanie brzmi czy da się to skrócić, zrobić lepiej?

PS. nazwy klas są mylne :)
Użycie:
 

$table=new table($db);
// $table->tabela->kolumna->_wartość->wybrane pole;
//u mnie może być np tak:
echo $table->player->gold->_200->id_user;

 

kod class
 

<?php
/**
 * Wszelkie prawa zastrzeżone PhpStorm, Maku
 * Date: 2015-09-06
 * Time: 20:47
 * Project: PhpStorm,htdocs

 */

class table {
    private $db;
    function __construct($db){
        $this->db=$db;
    }
    function __get($table){
        $x=new fields($this->db);
        $x->table=$table;
        return $x;
    }
}
class fields{
    public $table;
    private $db;

    function __construct($db){
        $this->db=$db;
    }
    function __get($column){
        $x=new col($this->db);
        $x->column=$column;
        $x->table=$this->table;
        return $x;
    }
}

class col{
    public $column;
    public $table;
    private $db;


    function __construct($db){
        $this->db=$db;
    }
    function __get($val){
        $var=str_replace("_","",$val);
        $query=$this->db->prepare('SELECT * FROM '.$this->table.' WHERE '.$this->column.'=?');
        $query->bindParam(1,$var,PDO::PARAM_INT);
        $query->execute();
        $x=$query->fetch(PDO::FETCH_OBJ);
        return $x;
    }
}

wiem tutaj mam tylko do liczb (może być tez do wartości txt), można powiedzieć że wystarczyłaby zwykła funckja ale tak to lepiej wygląda i lepiej się używa, czekam na jakieś komentarze :)

2 odpowiedzi

+2 głosów
odpowiedź 6 września 2015 przez Comandeer Guru (608,940 p.)
Ogarnij jakiegoś ORM-a, choćby Doctrine (albo przynajmniej Doctrine AL z Query Builderem).
komentarz 6 września 2015 przez makoso Mądrala (7,380 p.)
już dawno bym ćwiczył symfony tylko nie wiem co robię źle ale nawet zainstalować go nie mogę -.-
komentarz 6 września 2015 przez Comandeer Guru (608,940 p.)
A co ma Symfony do Doctrine? Doctrine to całkowicie osobny projekt.
komentarz 6 września 2015 przez efiku Szeryf (75,160 p.)
Ale doctrine dbal nie potrzebuje symfony, patrz: http://docs.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html

a QB da Ci możliwości robienia realcji, fetchowania do klas, zabawy z encjami.

Warto się z tym zapoznać, albo chociaż poczytać dokumentację.
komentarz 6 września 2015 przez makoso Mądrala (7,380 p.)

ale Symfony może korzystać(łączyć się, nie wiem) z Doctrine jak zwykle tylko czytałem na sucho  

+1 głos
odpowiedź 6 września 2015 przez event15 Szeryf (93,790 p.)

Użycie: ?

1

2

3

4

$table=new table($db);

// $table->tabela->kolumna->_wartość->wybrane pole;

//u mnie może być np tak:

echo $table->player->gold->_200->id_user;

 Serio?

$table = new Table($db);
$column = $table->addColumn(new Column($params));
$column->addGold($value);

Coś jak to powinno być. I tak to na szybkiego ale przynajmniej kod jednocznacznie powinien mówić co w danej chwili się chce zrobić. Odradzam używanie takich magicznych getów bo powodują one zamieszanie i gdy wrócisz do tego kodu za pół roku to nie będziesz mieć pojęcia co tam chciałeś zrobić w danej funkcji. 

Rób kod taki, jaki byś chciał czytać. Staraj się nazywać każdą funkcję i całą funkcjonalność jakoś rozbijać na zadania. Jeżeli coś się sprawdza za pomocą ifów to wydziel to do osobnej funkcji prywatnej. 
 

komentarz 6 września 2015 przez Comandeer Guru (608,940 p.)

Zamiast addGold można zrobić generyczną metodę set

$table->set('gold', $value);

IMO o wiele przejrzyściejsze niż magiczne. Zgadzam się z przedmówcą: magicznych powinno się unikać.

 

komentarz 6 września 2015 przez efiku Szeryf (75,160 p.)
Dobrze powiedziane. +1  ode mnie. Pozdrawiam!
komentarz 6 września 2015 przez event15 Szeryf (93,790 p.)
Można, ale jednak ja bym został przy moim rozwiązaniu.
Uznaję zasadę, że kod powinno się czytać jak prozę, od góry do dołu i każda funkcja powinna mieć wymowną nazwę i jedną funkcjonalność.

Żeby nie być gołosłownym polecam następujące pozycje:
Robert C. Martin: Czysty kod oraz Zwinne wytwarzanie oprogramowania. To elementarze dobrego programisty.
Później pozycje Martina Fowlera.
Tak samo Kent Beck - o testowaniu a raczej programowaniu sterowanym testami: Tak zwane TDD.
Matt Zandstra Obiekty w php.
Jest też Mistrz PHP. Nie pamiętam autora.

Linki przydatne:
www.phpspec.net
https://phpunit.de/
http://docs.behat.org/en/v2.5/
http://pl.phptherightway.com/ (chociaż polecam bardziej po ang)
http://designpatternsphp.readthedocs.org/en/latest/ (wzorce projektowe w PHP)

Podobne pytania

0 głosów
2 odpowiedzi 1,743 wizyt
pytanie zadane 31 sierpnia 2015 w PHP przez tytanik2011 Użytkownik (930 p.)
+1 głos
2 odpowiedzi 761 wizyt
pytanie zadane 29 sierpnia 2015 w SQL, bazy danych przez niezalogowany
0 głosów
1 odpowiedź 842 wizyt

93,772 zapytań

142,730 odpowiedzi

323,382 komentarzy

63,368 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...