Ciao a tutti,
ho un problema ad impostare paramatri opzionali per i metodi.

Ho il metodo getAccounts appartenente alla classe DB e vorrei fare in modo che ricerchi gli utenti nel database in base a dei parametri che gli si passa, ovvero se per esempio gli si passa come parametro l'id dell'utente lui cerca l'account in base all'id, se gli si passa l'username lo cerca in base a quest'ultimo e se invece non gli si passa nulla estrae tutti gli account dal database.

Ho provato in due modi diversi ma tutti danno degli errori, ecco quali:

Parametro singolo, controllo il tipo di variabile passata

Codice PHP:
public function getAccounts($par=NULL){
            if(
is_int($par)){
                
$query "SELECT * FROM ".$this->accounts_t." WHERE id_user =".$par;
            }else if(
is_string($par)){
                
$query "SELECT * FROM ".$this->accounts_t." WHERE username =".$par;
            }else 
$query "SELECT * FROM ".$this->accounts_t;
            
$mysqli $this->openDB();
            
$result $mysqli->query($query);
            
$this->closeDB($mysqli);
            if(
$result) return $result;
        } 
In questo modo se gli passo una intero funziona correttamente, se gli passo una stringa la query non va a buon fine e ricevo questo errore "Fatal error: Call to a member function fetch_array() on a non-object in C:\Program Files (x86)\EasyPHP-12.1\www\mysite_v01\prova_classi.php on line 9"

DUE PARAMETRI, ID E USERNAME

Codice PHP:
public function getAccounts($id=NULL,$uname=NULL){
            if(isset(
$id)){
                
$query "SELECT * FROM ".$this->accounts_t." WHERE id_user =".$id;
            }else if(isset(
$uname)){
                
$query "SELECT * FROM ".$this->accounts_t." WHERE username =".$uname;
            }else 
$query "SELECT * FROM ".$this->accounts_t;
            
$mysqli $this->openDB();
            
$result $mysqli->query($query);
            
$this->closeDB($mysqli);
            if(
$result) return $result;
        } 
In questo modo funziona solo se gli passo il primo parametro, nel caso lo salto scrivendo (NULL,$stringa) nei parametri mi restituisce lo stesso errore di prima, ovvero la query non viene eseguita con successo.

So che potrei usare ancora la funzione func_get_args() ma non ho proprio capito come gestirla.

Consigli?