Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OOP-处理类的自动实例-PHP_Php_Oop_Class_Instantiation - Fatal编程技术网

OOP-处理类的自动实例-PHP

OOP-处理类的自动实例-PHP,php,oop,class,instantiation,Php,Oop,Class,Instantiation,作为PHP和编程的初学者,这是一个让我有些困惑的话题。我正在建立一个股票市场网站,希望用户添加自己的股票。我可以清楚地看到,让每个股票成为一个包含类的所有方法的类实例的好处。我遇到的难题是,在实例化该实例时,最好给它起个名字。如果我有: class Stock() { ....doing stuff..... } 给我的实例命名的最好方法是什么。显然,我可以写: $newStock = new Stock(); $newStock.getPrice(); 或者随便什么,但是如果用户通过

作为PHP和编程的初学者,这是一个让我有些困惑的话题。我正在建立一个股票市场网站,希望用户添加自己的股票。我可以清楚地看到,让每个股票成为一个包含类的所有方法的类实例的好处。我遇到的难题是,在实例化该实例时,最好给它起个名字。如果我有:

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

给我的实例命名的最好方法是什么。显然,我可以写:

$newStock = new Stock();
$newStock.getPrice();
或者随便什么,但是如果用户通过应用程序添加股票,那么该实例的名称从何而来?我想总是用$newStock=newStock()创建一个新的子对象,然后将其存储到DB中,这将引出我的下一个问题,这没有什么害处

将20个用户股票(例如)检索到类Stock()实例中的最佳方法是什么?每次用户登录时,我是否需要实例化20个新的类Stock()实例,还是缺少什么


我希望有人能回答这个问题,更重要的是,希望有一群人能回答这个问题,这会帮助那些很难找到真正优雅解决方案的人。谢谢大家

我建议你做如下事情:

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();

所以你只需要
$stock->symbol='NEWSYMBOL'然后
$stock->lookup()

我不明白为什么不创建一个Stock()对象并让它从数据库中加载各种Stock属性。这似乎更安全,对我来说也不那么复杂。

你可以使用一系列股票。请注意,[]表示向数组中添加新项

$stocks[] = new Stock();
您可以按如下方式遍历所有这些文件:

foreach ($stocks as $stock) {
    echo $stock->lookup();
}
$stocks[7]->display();
您可以通过以下方式访问特定股票:

foreach ($stocks as $stock) {
    echo $stock->lookup();
}
$stocks[7]->display();

我理解实例化股票的想法。我的问题在于,如果用户添加3只新股,它们都会被实例化为变量$stock。或者,一旦它们被创建,它们就被放入数据库中,然后在检索它们时,我不需要将它们检索到实例中,而只需要检索到表或数组中。我的难题是,使用这种方法,一次只能有一个实例,因为唯一的变量名是$stock。这有意义吗?谢谢你的回复。dscher,我想我很难完全理解你说的话,但是$stock是stock类的一个实例,尽管它可以用于不同的股票代码。Jud,谢谢你的回复。假设我在一个页面上有30支股票要加载到一个表中,我应该在循环中反复使用$stock来加载并显示每支股票吗?或者我不使用Stock类,而只是查询DB并将数据放入表中,然后仅在有人请求特定股票时实例化?非常感谢你的回答。最后,一切都一样。一个类可以包含db逻辑,它只是为了重用而模块化的。我理解这一点。正如下面在另一个答案中提到的,创建一个股票实例作为数组,并使用股票代码来表示单个股票怎么样?在您看来,这是一个更优雅、更实用的解决方案吗?谢谢你的意见!如果我知道怎么做,我会这么做的。这是否意味着当一个用户登录到他们所有的库存时,他们会被实例化为新对象?这些新实例是如何命名的?或者你只是在有人选择编辑它们并且需要基于股票的方法时才实例化它们吗?你可以设置各种属性,例如你可以编写一个函数,比如:函数findStock($symbol){$db->get_row(“SELECT*FROM
Stock
WHERE
Stock_symbol
=”。mysql_real_escape_string($symbol)。“”);等等……)并在一个设置细节的函数中使用结果:函数setStock($mySqlResults){$this->name=$mySqlResults['stock_name'];$this->symbol=$mySqlResults['stock_symbol'];}----或者我完全误解了这个问题?因此我可以将一个新对象实例化到一个数组中,比如:$stocks['AAPL']=newstock();对吗?因此,特定用户的所有股票都可以保存在$stocks的一个实例中,而$stocks只是一个数组?如果是这样的话,我想你回答我的问题的方式我没有预料到,但非常喜欢。谢谢作为补充,一位朋友向我提到了另一种选择,即制作另一个类别,作为一个整体持有股票。该类将在一个数组中保存stock的每个单独实例,并专门将对象作为一个组进行管理,以便在项目变大时保持对项目的控制。