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

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++;
  }
$Product est un string, $Quantity et $Price sont des nombres, $Agent est un objet

Le problème se situe au niveau des lignes de mise à jour de l'objet agent :
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;
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]
// 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

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];
    // ...
  }
dans mon exemple, j'ai
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
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 ?