Interfejsy DAO deklarują metody wykonujące operacje odczytu/zapisu danych biznesowych ze/do źródła danych, zaś samo PDO deklaruje metody pozwalające na połączenie aplikacji ze źródłem danych (w dodatu bardzo konkretnym), tak więc to nie do końca to samo.

Cytat
[...] a są jakieś spójne interfejsy lub nazewnictwo?
Nie ma jakiś konkretnych wytycznych co do nazewnictwa. Z reguły interfejsy będą kończyły się przyrostkiem Dao/DAO (na sposób zapisu akronimów też nie ma jednoznacznej konwencji), a implementacje będą znajdować się w osobnej paczce (np. interfejsy w My\Project\Dao, a implementacje w My\Project\Dao\Impl\[Mysql|Postgres|Oracle|Mssql]).
Cytat
I jak nazywa się to:
Kod
public function doSomething(SomethingDao $sthDao) {
Chodzi mi o wywołanie klasy w metodzie, bo chce o tym poczytać.
Ale tu jest tylko zadeklarowana metoda doSomething() z jednym argumentem, który musi być obiektem implementującym interfejs SomethingDao. Jeżeli o to Ci chodzi to nazywa się to type hinting.
Swoją drogą, z racji na to, że w większości SQL-owskich baz danych zapytania są niemal identyczne (mowa oczywiście o prostych operacjach), będziesz mógł utworzyć sobie jeden obiekt (dla każdego rodzaju danych), po którym mogłyby dziedziczyć implementacje specyficznych baz danych:
namepsace My\Project\Dao;
interface UserAccountDao {
public function findInactive();
public function activate(Account $account);
}
namespace My\Project\Dao\Impl;
abstract class AbstractUserAccountDao {
protected $conn;
public function __construct(\PDO $conn) {
$this->conn = $conn;
}
public function findInactive() {
$sql = $this->getFindInactiveQuery();
$stmt = $this->conn->prepare($sql);
$stmt->execute();
return $stmt->findAll();
}
public function activate(Account $account) {
$sql = $this->getActivateQuery();
$stmt = $this->conn->prepare($sql);
$stmt->bindValue('id', $account->getId(), \PDO::PARAM_INT);
$stmt->execute();
}
protected function getFindInactiveQuery() {
return 'SELECT ... FROM ... WHERE is_active = 0 ...;';
}
protected function getActivateQuery() {
return 'UPDATE ... SET is_active = 1 WHERE id = :id;';
}
}
namespace My\Project\Dao\Impl\
Mysql;
class UserAccountDao extends AbstractUserAccountDao { }
namespace My\Project\Dao\Impl\Postgres;
class UserAccountDao extends AbstractUserAccountDao {
protected function getFindInactiveQuery() {
return 'jakieś tam specyficzne dla postgresa zapytanie - tutaj notabene nie potrzebne';
}
}