Includere classi senza classe principale

Salve, vorrei sapere se c'è il metodo di non estendere una classe sempre con la seguente riga di codice:

class User extends database{

etc..

Perché sto provando ad studiare le classi ed ora ho due classi una user e una login ma che estendono la classe

database dove sta la configurazione e una funzione dove ho creato per eseguire la query.

avete idea come fare?

grazie mille.

inviato 3 anni fa
luigi
Stai cercando una alternativa all'extends per utilizzare le funzioni della classe database?Gianni Tomasicchio 3 anni fa
si vorrei fare cosi... ma ho fatto questa classe del db: <?php class Database {   private $_connection;     private static $_instance;     public static function getInstance() {     if (!self::$_instance) {       self::$_instance = new self();     }     return self::$_instance;   }     public function __construct() {     $this->_connection = new mysqli('localhost', 'root', '', 'test');     if (mysqli_connect_error()) {       trigger_error('Failed to connect to MySQL: ' . mysqli_connect_error(), E_USER_ERROR);     }   }     public function getConnection() {     return $this->_connection;   } } e nella classe senza extends ho messo ogni funzione che accede al database questa dicitura: $db = Database::getInstance(); $db = $db->getConnection(); se conto voi per le prestazioni del sito in hosting condiviso cosa può succedere visto che uso l'autoload per caricare le classi. Mi date info ..  perché vedo sempre tutorial in siti inglesi e scaricare manuali a ufo. vi ringrazio molto. buona giornata.luigi 3 anni fa
X 0 X

Non è una buona pratica estendere classi in questo modo. La classe che estende dovrebbe essere una versione più specifica di quella estesa, per esempio questo ha senso: class Administrator extends User (un amministratore è un tipo particolare di utente).

Nel tuo caso invece hai bisogno di una classe dentro un'altra, nello specifico la classe User ha bisogno della classe Database (il nome per convenzione dovrebbe iniziare per maiuscola), il modo migliore per farlo è iniettare la classe, nel costruttore:

class User 
{
    protected $database;

    public function __construct(Database $database)
    {
        $this->database = $database;
    }

    // ....
}
risposto 3 anni fa
Massimiliano Arione
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda