JeuWeb - Crée ton jeu par navigateur
PHP: instanceof - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : PHP: instanceof (/showthread.php?tid=7379)

Pages : 1 2 3


RE: PHP: instanceof - srm - 09-06-2015

Bah je ferais comme je t'ai dit Smile


RE: PHP: instanceof - Xenos - 09-06-2015

D'acc, avec deux méthodes donc? Et l'appelant doit choisir laquelle utiliser?
Perso, je trouve toujours l'approche problématique, puisque l'appelant doit choisir la méthode uniquement parce que l'appelée (Irma) a un algo de choix interne des Vehicule qui lui est propre.


RE: PHP: instanceof - srm - 09-06-2015

Bah l'appelant sait quel véhicule il donne à Irma pour l'acheter normalement Smile


RE: PHP: instanceof - Xenos - 09-06-2015

Pas dit: si l'appelant ne gère que des Vehicule, parce qu'il s'agit d'un intermédiaire?

Code PHP :
<?php 
class SellerProxy {
public function
sellVehicle(Vehicle $vehicle) {
$this->irma->sell???($vehicle);
}
}


Ou, par exemple, pour des nombres (cas plus concret):
Code PHP :
<?php 
class FractionRelle implements Fraction, Nombre{
}
class
EntierPositif implements Entier, Nombre {
}

class
Additition {
public function
add(Nombre $n, Nombre $p) {
// ??
}
private function
add(Fraction $f, Entier $e) {
// Do calc stuff
return new Fraction|Entier(); // Depends on the calculation
}
private function
add(Complexe $c, Nombre $n) {
// other calcs
}
// ... And other private calculation methods
}
Le but de ma class d'addition est d'être une façade, pour m'éviter de faire des conversions dans tous les sens (qui en plus se baseraient aussi sur les valeurs des Nombre). L'appelant de Addition n'aurait donc qu'une seule méthode appelable (but d'une Facade), mais cette méthode doit ensuite faire le tri. Et là, sans instanceof, comment cela se passerait?

Le design pattern de Facade serait incompatible avec la notion de choix de méthode par l'appelant.


RE: PHP: instanceof - niahoo - 09-06-2015

Tu sais, si tu cherches suffisamment longtemps, tu trouveras bien un cas où instanceof est obligatoire. D'autant plus que tu crées le cas toi-même au fur et à mesure. À quoi bon ?


RE: PHP: instanceof - Xenos - 09-06-2015

A quoi bon? A savoir si instanceof est vraiment une mauvaise pratique dans l'absolue, ou seulement parce que les autres le disent (comme pour les iframe donc :p ). Perso, je le range dans la catégorie des trucs utilisables quand on en a besoin. Mais je voulais savoir si c'est un avis partagé Smile


RE: PHP: instanceof - srm - 09-06-2015

Bah le seller sellMoto :p
Il y a sans doute des cas ou c'est inévitable l'instanceof.
Mais pour le moment je vois surtout des cas ou de s'en passer permet de mieux verrouiller les choses.


RE: PHP: instanceof - Xenos - 09-06-2015

De mieux verrouiller, ou de faire bouillonner les algos? Parce que la seule raison pour laquelle le seller ait un sellMoto, c'est qu'il le repasse à Irma qui a une différenciation Moto/Camion en interne. Celui qui appelle le SellerProxy subirait ce qui se passe en interne d'Irma...

Mais bon, dans tous les cas, @srm, comment tu ferai pour implémenter un design pattern de Facade sans aucun instanceof (les deux notions me semblant incompatibles) ?


RE: PHP: instanceof - srm - 09-06-2015

Donne un exemple simple en PHP et j'y réfléchis Smile
Certains pattern n'ont pas de sens en East


RE: PHP: instanceof - niahoo - 09-06-2015

Les iframes, j'en bouffe toute la journée certains mois, et j'ai mon propre avis dessus, sans connaitre celui des autres en général. ça peut être pratique, mais de ce que j'ai vu sur plusieurs applis, ça montre souvent que l'architecte ne sait pas ce qu'il fait, ou du moins n'a pas de connaissances suffisantes pour faire mieux.

C'est souvent le cas aussi dans les grosses successions de if/elseif/elseif/else. Typiquement le genre de bloc dans lequel on utilise les instanceof. Ensuite, je pense que comme toi de temps en temps ça peut servir.