moin,
wenn ich einen User-Objekt aus der Database über ein UserRepository
haben möchte, jedoch findet die Database einfach keinen angeforderten Record, dann wird zwangsläufig ein Fehler auftreten, weil das System keinen TUser
fetcht sondern null
zurück gibt. Und Ich möchte sehr gern mit Return-Type arbeiten können.
class UserRepository {
public function findByPseudo( string $pseudo ) : TUser {
$this->_database->fetchAssoc(); // FETCH_CLASS TUser wird noch kommen
$items = $this->_database->get(
"SELECT * FROM {$this->_table}"
." WHERE pseudo = '{$pseudo}';",
[ $pseudo ]
);
return new TUser(
$items[ 'first' ],
$items[ 'last' ],
$items[ 'email' ],
$items[ 'pseudo' ],
$items[ 'role' ],
$items[ 'hash' ]
);
}
}
$user_repo = new UserRepository;
$user = $user_repo->findByPseudo( 'mb' ); // Error fals nicht existiert
Um dem Problem Herr zu werden könnte ich eine Existenz-Abfrage vorher machen was ich gemacht habe…
class UserRepository {
public function existPseudo( string $pseudo ) : bool {
$this->_database->fetchAssoc();
return !empty( $this->_database->getAll(
"SELECT pseudo FROM {$this->_context}"
." WHERE pseudo = ?;",
[ $pseudo ]
) );
}
public function findByPseudo( string $pseudo ) : TUser {
// ...
}
}
$user_repo = new UserRepository;
if( $user_repo->existPseudo( 'mb' ) ) {
$user = $user_repo->findByPseudo( 'mb' );
}
…aber das frisst denke ich mal Systemzeit zweimal eine Verbindung zur Database aufzubauen und Anfragen anzustrengen. Wäre eine Art TUser
Property im Repository möglich sodass diese Existns-Abfrage überflüssig wird? wie…
class UserRepository {
private $user = null;
public function findByPseudo( string $pseudo ) : void {
$this->_database->fetchAssoc(); // FETCH_CLASS TUser wird noch kommen
$items = $this->_database->get(
"SELECT * FROM {$this->_table}"
." WHERE pseudo = '{$pseudo}';",
[ $pseudo ]
);
$this->_user = is_null( $items )
? new TUser(
$items[ 'first' ],
$items[ 'last' ],
$items[ 'email' ],
$items[ 'pseudo' ],
$items[ 'role' ],
$items[ 'hash' ]
)
: null;
}
}
$user_repo = new UserRepository;
$user = $user_repo->findByPseudo( 'mb' );
if( !is_null( $user ) {
// Code
}
Bevor ich was wirklich dämliches mache möchte und den ganzen Codew umstruktuieren möchte ich erstmal Fragen.
lgmb