PHP, comme nous le savons tous est très faiblement typé. Le langage ne vous oblige pas à spécifier un type de type pour les paramètres de fonction ou les variables de classe. Cela peut être une fonctionnalité puissante. Parfois, cependant, il peut rendre le débogage de votre script une expérience douloureuse. Par exemple, le passage d'un type d'objet dans une méthode qui attend un type d'objet différent peut produire des messages d'erreur se plaignant qu'une certaine variable/méthode n'existe pas pour l'objet transmis. Ces situations sont principalement des ennuis. Les problèmes les plus onéreux sont lorsque vous initialisez un objet avec un objet de la mauvaise classe, et que "mauvais objet" ne sera pas utilisé plus tard dans l'exécution du script. Dans ce cas, vous obtenez une erreur beaucoup plus tard que lorsque vous avez passé l'argument d'origine. Plutôt que de me plaindre que ce que j'ai passé n'a pas de méthode ou variable spécifique, ou d'attendre beaucoup plus tard dans l'exécution du script pour que l'objet passé soit utilisé, Je préfère recevoir un message d'erreur, à exactement où je spécifie un objet du mauvais type, se plaignant du type de l'objet étant incorrect ou incompatible.Comment empêcher l'utilisation du type incorrect en PHP?
Comment gérez-vous ces situations dans votre code? Comment détectez-vous les types incompatibles? Comment puis-je introduire une vérification de type dans mes scripts afin que je puisse obtenir des messages d'erreur plus faciles à comprendre?
Aussi, comment pouvez-vous faire tout cela en tenant compte de l'héritage dans Php? Tenir compte:
<?php
class InterfaceClass
{
#...
}
class UsesInterfaceClass
{
function SetObject(&$obj)
{
// What do I put here to make sure that $obj either
// is of type InterfaceObject or inherits from it
}
}
?>
Ensuite, un utilisateur de ce code implémente l'interface avec leur propre classe concrète:
<?php
class ConcreteClass extends InterfaceClass
{
}
?>
Je veux des instances ConcreteClass, et tous les futurs, les objets définis par l'utilisateur inconnus, aussi acceptable à SetObject. Comment rendriez-vous cela admissible en vérifiant le bon type?
instanceof est utile. Rappelez-vous juste de ne pas en abuser. –