2010-03-26 4 views
0

C'est un sujet qui, en tant que débutant en PHP et en programmation, me laisse perplexe. Je construis un site web boursier et je veux que les utilisateurs ajoutent leurs propres actions. Je peux clairement voir l'avantage de faire de chaque stock une instance de classe avec toutes les méthodes d'une classe. Ce que je suis perplexe est la meilleure façon de donner un nom à cette instance quand je l'instancie. Si j'ai:OOP - Gestion des instances automatisées d'une classe - PHP

class Stock() { 
    ....doing stuff..... 

}

quelle est la meilleure façon de donner à mes instances de ce nom. Il est évident que je peux écrire:

$newStock = new Stock(); 
$newStock.getPrice(); 

ou autre chose, mais si un utilisateur ajoute un stock via l'application, où le nom de cette instance peut provenir? Je suppose qu'il y a peu de mal à toujours créer un nouvel enfant avec $ newStock = new Stock() puis à le stocker dans la BD, ce qui m'amène à ma prochaine question!

Quel serait le meilleur moyen de récupérer 20 stocks d'utilisateurs (par exemple) dans des instances de la classe Stock()? Ai-je besoin d'instancier 20 nouvelles instances de la classe Stock() chaque fois que l'utilisateur se connecte ou y a-t-il quelque chose qui me manque? J'espère que quelqu'un répondra à cette question et, plus important encore, j'espère qu'un groupe de personnes répondra à cette question et aidera d'autres personnes qui ont de la difficulté à contourner ce qui mène probablement à une solution vraiment élégante. Merci les gars!

+0

Comme un additif, un ami m'a mentionné une autre option qui est de faire une autre classe pour détenir les stocks en tant que groupe. La classe contiendra chaque instance individuelle de Stocks dans un tableau et sera dédiée à la gestion des objets en tant que groupe pour garder le contrôle sur le projet à mesure qu'il s'agrandit. – dscher

Répondre

0

Vous pouvez simplement utiliser une série de stocks. Notez que [] signifie ajouter un nouvel élément au tableau.

$stocks[] = new Stock(); 

Vous pouvez parcourir tous comme ceci:

foreach ($stocks as $stock) { 
    echo $stock->lookup(); 
} 

Vous pouvez accéder à un stock particulier comme celui-ci:

$stocks[7]->display(); 
+0

Donc, je pourrais instancier un nouvel objet dans un tableau tel que: $ stocks ['AAPL'] = new Stock(); Est-ce exact? Par conséquent, tous les stocks pour un utilisateur particulier pourraient être conservés dans une instance de $ stocks qui est juste un tableau? Si oui, je pense que vous avez répondu à ma question d'une manière que je ne m'attendais pas, mais tout à fait comme. Merci! – dscher

+0

Votre réponse gagne, merci pour l'explication facile. – dscher

1

Je vous conseille de faire quelque chose comme:

class Stock() 
{ 
    public var $symbol; 

    public function __construct($symbol) 
    { 
     $this->symbol = $symbol; 
    } 

    public function lookup() 
    { 
     // do something 
     return $data; 
    } 
} 


$stock = new Stock('AAPL'); 
$data[] = $stock->lookup(); 

Vous pourriez juste $stock->symbol = 'NEWSYMBOL'; puis $stock->lookup();

+0

Je comprends l'idée d'instancier le stock. Le problème pour moi réside dans le fait que si un utilisateur ajoute 3 nouvelles actions, elles seront toutes instanciées avec la variable $ stock. Cela, ou dès qu'ils sont créés, ils sont placés dans la base de données et, en les récupérant, je n'ai PAS besoin de les récupérer dans des instances, mais seulement dans une table ou un tableau. C'est mon énigme est qu'avec cette méthode vous pouvez seulement avoir une instance à la fois parce que le seul nom de variable est $ stock. Cela a-t-il du sens? Merci pour la réponse. – dscher

+0

dscher, je suppose que j'ai du mal à comprendre exactement ce que vous dites, mais $ stock est une instance de la classe Stock, bien qu'il puisse être réutilisé pour différents symboles ticker. – jps

+0

Jud, merci pour la réponse.Disons que j'ai 30 stocks à charger sur une page dans une table, devrais-je utiliser $ stock encore et encore dans une boucle pour charger chacun et l'afficher? Ou est-ce que je n'utiliserais pas la classe de stock et au lieu d'interroger la base de données et de mettre les données dans une table, puis instancier UNIQUEMENT lorsque quelqu'un a demandé un stock spécifique? Merci beaucoup pour la réponse. – dscher

0

Je ne comprends pas pourquoi vous ne seriez pas simplement faire un objet Stock() et avoir charger les différentes propriétés de stock à partir d'une base de données. Cela semble beaucoup plus sûr pour moi et beaucoup moins compliqué pour moi.

+0

Je le ferais si je comprenais la façon de le faire. Cela signifie-t-il que lorsqu'un utilisateur se connecte, tous ses stocks sont instanciés en tant que nouveaux objets? Comment ces nouvelles instances sont-elles nommées? Ou est-ce que vous ne les instanciez que lorsque quelqu'un choisit de les éditer et que des méthodes à base de stock sont nécessaires? – dscher

+0

Vous définissez différentes propriétés, par exemple Vous pouvez écrire une fonction comme: fonction findStock (symbole $) { $ db-> de get_row ("SELECT * FROM' stock' où 'stock_symbol' = « " mysql_real_escape_string ($. symbole) . "'"); Etc ..... } et utiliser les résultats dans une fonction qui définit les détails: fonction setStock ($ mySqlResults) {$ this-> name = $ mySqlResults [ 'stock_name']; $ this-> symbol = $ mySqlResults ['stock_symbol']; Ou peut-être que j'ai complètement mal compris la question? } ------- – niggles