• 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)

Object Storage Arubacloud
0 głosów
492 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 (601,450 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 (601,450 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 (601,450 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,432 wizyt
pytanie zadane 31 sierpnia 2015 w PHP przez tytanik2011 Użytkownik (930 p.)
+1 głos
2 odpowiedzi 556 wizyt
pytanie zadane 29 sierpnia 2015 w SQL, bazy danych przez niezalogowany
0 głosów
1 odpowiedź 395 wizyt

92,575 zapytań

141,424 odpowiedzi

319,649 komentarzy

61,961 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...