mgsmus
1-
class QueryResult {
private $stmt;
public function __construct(PDOStatement $stmt) {
$this->stmt = $stmt;
}
public function fetchAll() {
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
}
}
function runQuery(PDO $pdo, $sql) {
$stmt = $pdo->prepare($sql);
$stmt->execute();
return new QueryResult($stmt);
}
$pdo = new PDO("mysql:host=localhost;dbname=mydb", "username", "password");
$queryResult = runQuery($pdo, "SELECT * FROM users");
$users = $queryResult->fetchAll();
yani mesela burada runQuery()
$pdo aldığı için ve o da PDO
olduğu için tipini PDO
veriyoruz. Fakat
function runQuery(PDO $pdo, $sql) {
$stmt = $pdo->prepare($sql);
$stmt->execute();
return new QueryResult($stmt);
}
bu kod sonuçta PDOStatement
döndürdüğü için mi
public function __construct(PDOStatement $stmt) {
$this->stmt = $stmt;
}
burada PDOStatement
döndürüyoruz.
2 -
Ayrıca
function runQuery(PDO $pdo, $sql) {
$stmt = $pdo->prepare($sql);
$stmt->execute();
return new QueryResult($stmt);
}
bu kodda da dönüş tipinde olduğu gibi verilen objeye uygun vermeliyiz tipi dimi yani string $pdo
değil PDO $pdo
böyle.
3-
Eğer object bir sınıfı miras alıyorsa (extends) ya da bir interface uyguluyorsa (implements) o zaman duruma göre direkt dönen objeyi değil de miras aldığı sınıfı ya da uyguladığı arayüzü dönebilirsiniz.
interface Printable {
public function printData(): void;
}
class Data implements Printable {
private $data;
public function __construct($data) {
$this->data = $data;
}
public function printData(): void {
echo $this->data;
}
}
function processData($data): Printable {
return new Data($data);
}
böyle dimi