Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kilka pytań
Forum PHP.pl > Forum > PHP > Object-oriented programming
Fifi209
Mam kilka pytań dot. programowania obiektowego.

Pierwsze dotyczy PDO.

Przykładowo kod:

Kod
$pdo = new PDO(); // chyba każdy wie jak się połączyć...

$result = $pdo->prepare('SELECT * FROM `test` WHERE `name` = :name');
$result->bindValue(':name', $zmienna, PDO::PARAM_STR);
$result->execute();


Pisałem dla przykładu (może zawierać błędy), mniejsza o to. Chodzi mi o typy zmiennych:
PDO::PARAM_STR, PDO::PARAM_INT itd.

Jak skrypt rozpoznaje po takim parametrze czy to string czy int czy coś innego?


A drugie:

(wycięte z FeedGenerator)

Kod
interface Generator {
    public function generate(Channel $channel);
    public function generatorName();
}


Kod
public function setGenerator(Generator $generator)


Jakie mi to daje możliwości? smile.gif

Nie umiałem nic o tym znaleźć na necie, dlatego pytam.
Crozin
PDO::PARAM_STR, PDO::PARAM_INT to stałe klasy
  1. <?php
  2. class PDO{
  3.  const PARAM_STR = 1;
  4.  const PARAM_INT = 2;
  5. }
  6. ?>
Tak można by to zapisać. Później w takiej metodzie bindValue(), skrypt sprawdza sobie (przy pomocy switcha()) jaki parameter został podany i bazując na tym, odpowiednio filtruje dane.
Fifi209
Cytat(Crozin @ 24.05.2009, 00:06:41 ) *
PDO::PARAM_STR, PDO::PARAM_INT to stałe klasy
  1. <?php
  2. class PDO{
  3.  const PARAM_STR = 1;
  4.  const PARAM_INT = 2;
  5. }
  6. ?>
Tak można by to zapisać. Później w takiej metodzie bindValue(), skrypt sprawdza sobie (przy pomocy switcha()) jaki parameter został podany i bazując na tym, odpowiednio filtruje dane.


Właśnie o czymś takim myślałem, ale wydało mi się to troszkę dziwne. ;d

A co z drugim pytaniem?
Crozin
Cytat
Jakie mi to daje możliwości?
Ale co dokładniej?
Fifi209
Cytat(Crozin @ 24.05.2009, 00:23:55 ) *
Ale co dokładniej?


Dokładnie po co tego używać, bo nie widzę różnicy. ;d
vokiel
Po to, żeby przefiltrować dane wejściowe, ograniczyć możliwość wpisania danych niepoprawnego typu. A przede wszystkim blokowania SQL Injection - dane wstawiane do zapytania są filtrowane pod względem znaków niebezpiecznych dla danego typu bazy.
Fifi209
Cytat(vokiel @ 24.05.2009, 10:25:21 ) *
Po to, żeby przefiltrować dane wejściowe, ograniczyć możliwość wpisania danych niepoprawnego typu. A przede wszystkim blokowania SQL Injection - dane wstawiane do zapytania są filtrowane pod względem znaków niebezpiecznych dla danego typu bazy.


Jakbyś mógł mi to pokazać na przykładzie.

Blokowanie SQL injection - to pytanie było tylko o stałe. ;d To chyba było oczywiste.
vokiel
  1. <?php
  2. $calories = 100;
  3. $colour = 'red';
  4. $sth = $dbh->prepare('SELECT name, colour, calories FROM fruit WHERE calories < :calories AND colour = :colour');
  5. $sth->bindParam(':calories', $calories, PDO::PARAM_INT);
  6. $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
  7. $sth->execute();
  8. ?>

PDO doda do $colour apostrofy, liczby zostaną zmapowane na wartości liczbowe, dzięki temu nie przemycisz w zapytaniu $calories = 'sto'.
Poza tym bindParam ma możliwość określenia długości, zatem możemy określić, że nasz $colour moze mieć max 12 znaków.


Odnośnie Twojego drugiego pytania
  1. <?php
  2. interface Generator {
  3.    public function generate(Channel $channel);
  4.    public function generatorName();
  5. }
  6. public function setGenerator(Generator $generator)
  7. ?>


Strukura ta gwarantuje, że do funkcji setGenerator zostanie przekazany obiekt klasy implementującej interface Generator. Dzięki temu będziesz miał pewność że na tym przekazanym obiekcie możesz wykonać funkcje generate(), oraz generatorName().
Jest to bardzo przydatne przy tworzeniu rozszerzeń, lub udostępnianiu możliwości dopisywania własnych pluginów, czy czegokolwiek, co może być rozszerzane przez zewnętrznych programistów. Daje możliwość kontroli, czy przekazywany obiekt nadaje się do dalszego wykorzystania, czy pasuje do naszej logiki aplikacji implementując niezbędne metody

Pozdrawiam
webdice
Proszę poprawić tytuł, ma on opisywać problem. W innym wypadku zostanie zamknięty.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.