Bonjour, le problème est le suivant :
J'ai une classe Agent et une classe Market
la classe agent possède un attribut Stock et un attribut OnSale : il s'agit de tableau répertoriant les quantités de produit d'un agent selon leur état.
Par exemple, un agent posséde initialement 5 cartes ($Stock['carte'] = 5), il en met 3 en vente sur le marché ($Stock['carte'] = 2, $OnSale['carte'] = 3).
La mise en vente sur le marché se fait au sein de la classe Market via la fonction Sell suivante
$Product est un string, $Quantity et $Price sont des nombres, $Agent est un objet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 function Sell($Product, $Quantity, $Price, $Agent) { $this->Quantity[$Product][$this->NextTicket] = $Quantity; $this->Price[$Product][$this->NextTicket] = $Price; $this->Seller[$Product][$this->NextTicket] = $Agent; $Agent->Stock[$Product] = $Agent->Stock[$Product] - $Quantity; // echo $Agent->Stock[$Product]; $Agent->OnSale[$Product] = $Agent->OnSale[$Product] + $Quantity; // echo $Agent->OnSale[$Product]; $this->NextTicket++; }
Le problème se situe au niveau des lignes de mise à jour de l'objet agent :
Si par exemple, l'agent qui possède initialement 5 cartes, en met 3 en ventes sur le marché à 2€ puis 1 à 3€, ces deux opérations se traduisent par le code suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 $Agent->Stock[$Product] = $Agent->Stock[$Product] - $Quantity; $Agent->OnSale[$Product] = $Agent->OnSale[$Product] + $Quantity;
[CODE]
// Sell($Product, $Quantity, $Price, $Agent)
$marche->Sell('Carte', '3', '2', $vendeur);
$marche->Sell('Carte', '1', '3', $vendeur);
[CODE]
En principe à l'issue de ces deux opérations, on devrait avoir
$vendeur->Stock['carte'] = 1;
$vendeur->OnSale['carte'] = 4;
or, j'ai :
$vendeur->Stock['carte'] = 5;
$vendeur->OnSale['carte'] (inexistant)
les attributs de l'agent ne sont pas mis à jour par la fonction Sell
Par contre, en plaçant un echo au sein de la fonction Sell, on s'aperçoit que les opérations sont bien menées mais qu'elles ne sont pas persistantes au delà de la fonction
dans mon exemple, j'ai
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function Sell($Product, $Quantity, $Price, $Agent) { // ... $Agent->Stock[$Product] = $Agent->Stock[$Product] - $Quantity; echo $Agent->Stock[$Product]; $Agent->OnSale[$Product] = $Agent->OnSale[$Product] + $Quantity; echo $Agent->OnSale[$Product]; // ... }
Comment faire pour avoir un code qui permette d'agir depuis la fonction Sell de la classe Market de façon persistante sur les attributs Stock et OnSale de la classe Agent ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // stock initial = 5 $marche->Sell('Carte', '3', '2', $vendeur); echo $Agent->Stock[$Product]; // (au sein de la fonction donne 2 (5-3) echo $Agent->OnSale[$Product]; // (au sein de la fonction donne 3 (0+3) $marche->Sell('Carte', '1', '3', $vendeur); echo $Agent->Stock[$Product]; // (au sein de la fonction donne 4 (5-1) // ce devrait être 1 (2-1), la première opération (5-3) n'a pas eu d'influence //au dela de la fonction echo $Agent->OnSale[$Product]; // (au sein de la fonction donne 1 (0+1) // ce devrait être 4 (3+1), la première opération (0+3) n'a pas eu d'influence //au dela de la fonction
Partager