Salut,

Je m'essaye depuis quelque temps à la poo... Et c'est pas simple, donc, je me suis dit, ok, pourquoi ne pas trouver des scripts simples et essayer de comprendre leur fonctionnement...

Source de mon interrogation : https://github.com/Chovanec/elo-rating/blob/master/src/Rating/Rating.php

Extrait des 2 fonctions qui m’interpellent...

public function  __construct($ratingA,$ratingB,$scoreA,$scoreB)
    {
        $this->setNewSettings($ratingA, $ratingB, $scoreA, $scoreB);
    }

public function setNewSettings($ratingA,$ratingB,$scoreA,$scoreB)
    {
        $this -> _ratingA = $ratingA;
        $this -> _ratingB = $ratingB;
        $this -> _scoreA = $scoreA;
        $this -> _scoreB = $scoreB;
        $expectedScores = $this -> _getExpectedScores($this -> _ratingA,$this -> _ratingB);
        $this -> _expectedA = $expectedScores['a'];
        $this -> _expectedB = $expectedScores['b'];
        $newRatings = $this ->_getNewRatings($this -> _ratingA, $this -> _ratingB, $this -> _expectedA, $this -> _expectedB, $this -> _scoreA, $this -> _scoreB);
        $this -> _newRatingA = $newRatings['a'];
        $this -> _newRatingB = $newRatings['b'];
        return $this;
    }



Pourquoi ne pas faire la fonction setNewSettings ainsi :

public function setNewSettings($ratingA,$ratingB,$scoreA,$scoreB)
    {
	$expectedScores = $this -> _getExpectedScores($ratingA,$ratingB);
	$newRatings = $this ->_getNewRatings($ratingA, $ratingB, $expectedScores['a'], $expectedScores['b'], $scoreA, $scoreB);
	$this -> _newRatingA = $newRatings['a'];
	$this -> _newRatingB = $newRatings['b'];
	return $this;
    }

Et pourquoi ne pas l'intégrer directement dans la fonction de construction ainsi :

public function  __construct($ratingA,$ratingB,$scoreA,$scoreB)
	{
		$expectedScores = $this -> _getExpectedScores($ratingA,$ratingB);
		$newRatings = $this ->_getNewRatings($ratingA, $ratingB, $expectedScores['a'], $expectedScores['b'], $scoreA, $scoreB);
		$this -> _newRatingA = $newRatings['a'];
		$this -> _newRatingB = $newRatings['b'];
		return $this;
	}


Merci pour vos explications. Smiley cligne
Tu peux le faire comme tu la fait... Après on ne connait pas le but et le comment du pourquoi le développeur à fait de tel façon. Surtout que y'a même pas de commentaires...

Je dirais qu'il voulait bien "décortiquer" pour comprendre l'algo.
OK, merci de ton retour.

Ce qui me perturbais le plus était d'utiliser les élément "this" un peu partout pour réaffecter des variables.

Faire par exemple : $ratingA = "xxx", puis "$this -> _ratingA = $ratingA;"
Pour ensuite utiliser "$this -> _ratingA" à la place de directement $ratingA

Je me disais... tiens, y a peut-être une question de protection d'accès à la variable qui est en jeu... Parce que j'ai encore du mal avec ces notion de protected/private/public et de possible héritage...

Encore une question pendant que y a quelqu'un sur le fil. Smiley smile
Pourquoi ne pas mettre la fonction setNewSettings en protected comme toute les autres vu que l'on a le constructeur en public. ?
Modérateur
Si c'est écrit comme ça, c'est pour pouvoir passer des nouveaux réglages à une instance existante. On ne rappelle jamais le constructeur.


$ratings = new Rating(1,2,3,4);
… pleins de trucs …
$ratings->setNewSettings(5,6,7,8);


Concevoir la classe ainsi permet ainsi d'ajouter des opérations au constructeur qui ne seront pas dans setNewSettings.
Salut Smiley smile

Petit complément... Smiley cligne

Les raisons de sa construction moi je les vois sans connaitre plus loin que ce que tu as copié Smiley cligne

primo, faire ceci :
$this -> _ratingA = $ratingA;


a du sens pour retrouver cette même valeur tout au long de l'utilisation de la class, qui ne doit surement pas contenir que ce que tu as copié là Smiley cligne
Si on utilise directement $ratingA la variable ne sera dispo que dans la première fonction Smiley smile

Ensuite on peut, à juste titre, penser que la fonction est publique pour pouvoir être utilisée plusieurs fois et pas seulement à la création de la classe Smiley cligne

Donc cela me semble bien écrit tel quel pour une portabilité maximum.

Je suppose qu'en entrée de fichier tu as ce genre de chose :

public  OU private $_ratingA;
public  OU private $_ratingB;
@ pchlj
Slt,
Y a le lien du fichier source dans mon post initial. Smiley cligne

@kustolovic
Pas idiot, en effet.

Merci
Oui il y a le lien, mais figure toi que j'ai un travail Smiley cligne et que certes je prend le temps de répondre ici mais pas forcément le temps de détailler les liens Smiley lol

Donc j'ai cliqué pour voir Smiley smile

Les deux variables sus nommées sont bien en protected. Avantage de protected, les variables sont ainsi disponible dans la classe mais également dans ses enfants Smiley cligne
Modérateur
Hello,

JENCAL a écrit :
Tu peux le faire comme tu la fait... Après on ne connait pas le but et le comment du pourquoi le développeur à fait de tel façon. Surtout que y'a même pas de commentaires...

Je dirais qu'il voulait bien "décortiquer" pour comprendre l'algo.


+1. Il est souvent intéressant de factoriser le plus possible son code. Aussi, il est bon d'organiser son code afin de savoir qui fait quoi.

Il est bon aussi d'avoir peu de dépendance et un couplage lâche. Ainsi, chaque objet peut fonctionner indépendamment des uns et des autres.

pchlj a écrit :
pour compléter.

Un très bon cours sur la poo

https://openclassrooms.com/courses/programmez-en-oriente-objet-en-php


mouais.... On va dire que c'est le B A ba. C'est juste une introduction sur le sujet.... Smiley cligne
Modifié par niuxe (15 Jan 2018 - 12:09)
@niuxe : Oui c'est le B.A.ba, mais comme le dit Rodolphe lui même, il débute et veut comprendre Smiley smile
Et comme il le dit encore lui même c'est le cours qu'il suit et où il ne comprend pas Smiley smile

Comme quoi ce BA ba, bien que plutôt bien expliqué n'est pas accessible à tous Smiley cligne

Courage Rodolphe tu peux y arriver Smiley cligne
En fait il serait intéressant de savoir quels sont tes bases en programmation ?
Tu te mets à la POO mais tu pars de quoi au départ ?? tu connais bien le php ? Le procédural n'a plus de secret pour toi ? c'est dans la continuité d'une autre formation ??
Je fais mon curieux Smiley cligne
JENCAL a écrit :
Tu peux le faire comme tu la fait... Après on ne connait pas le but et le comment du pourquoi le développeur à fait de tel façon. Surtout que y'a même pas de commentaires...
Je dirais qu'il voulait bien "décortiquer" pour comprendre l'algo.

Oh l'Ami, tu est loin d'étre un débutant, alors évites d'enfoncer le clou des journalistes qui (surtout sur l'IA) parlent d'Algorithme alors qu'ils décrivent des programmes ! Smiley cligne