Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Jak stosować interfejsy?
eerie
post
Post #1





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Nie czuję do końca stosowania interfejsów w mojej aplikacji... Poniżej podaję, jak to obecnie wygląda. Może tak zostać bądź coś poprawić?

Utworzyłem interfejs Mysqli dla klasy Database:

Kod
<?php

declare(strict_types=1);

namespace App\Core;

interface Mysqli
{
    public function dbConnect(): void;
    public function dbClose(): void;
    public function dbQuery(string $query): mixed;
    public function dbFetchArray(mixed $result): array|null|false;
    public function dbNumberRows(mixed $result): int;
    public function dbAffectedRows(): int;
    public function dbInsertId(): int;
    public function dbStartTransaction(): bool;
    public function dbCommit(): bool;
    public function dbRollback(): bool;
}


Interfejs Mail jest implementowany przez Email:

Kod
<?php

declare(strict_types=1);

namespace App\Core;

interface Mail
{
    public function sendEmail(
        string $serverName,
        string $emailFrom,
        string $emailTo,
        string $subject,
        string $message
    ): bool;
}


Oraz interfejs Validator jest implementowany przez abstrakcyjne klasy Code, Error i Message, które są potem rorszerzane przez podklasy odpowiedziane za validację (np. MainPageValidator) danych z formularzy czy api:

Kod
<?php

declare(strict_types=1);

namespace App\Core;

interface Validator
{
    public function isValid(): bool;
}


Wypadałoby dodać jeszcze inne interfejsy dla moich klas tutaj? Trochę nie czuję, gdzie powinienem stosować interfejsy...
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
eerie
post
Post #2





Grupa: Zarejestrowani
Postów: 114
Pomógł: 0
Dołączył: 3.08.2017

Ostrzeżenie: (0%)
-----


Poprawiłem (szczegóły tutaj):

Kod
<?php

declare(strict_types=1);

namespace App\Core;

interface Database
{
    public function connect(): void;
    public function close(): void;
    public function query(string $query): bool;
    public function result(): mixed;
    public function fetchArray(mixed $result): array|null|false;
    public function numberRows(mixed $result): int;
    public function affectedRows(): int;
    public function insertId(): int;
    public function startTransaction(): bool;
    public function commit(): bool;
    public function rollback(): bool;
}


Kod
<?php

declare(strict_types=1);

namespace App\Core;

class Mysqli implements Database
{
    [...]

    public function query(string $query): bool
    {
        $this->mysqlResult = mysqli_query($this->mysqlLink, $query);

        return (bool) $this->mysqlResult;
    }

    public function result(): mixed
    {
        return $this->mysqlResult;
    }

    [...]
}


Kod
abstract class Controller
{
    [...]

    public function setManager(string $name = 'Mysqli'): void
    {
        if (!isset($this->manager[$name])) {
            $this->database[$name] = new $name($name);
            $this->manager[$name] = new Manager($this->database[$name]);

            $this->database[$name]->connect();
        }
    }

    public function getManager(string $name = 'Mysqli'): Manager
    {
        $this->setManager($name);

        return $this->manager[$name];
    }

    [...]


Ten post edytował eerie 3.03.2025, 17:40:26
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 27.12.2025 - 23:04