php – 从数组中访问类变量
发布时间:2020-12-13 16:57:13 所属栏目:PHP教程 来源:网络整理
导读:我是 PHP的新手,我无法访问一些类变量. 我有这门课: class emptyClass { private $ladderWinsNoCoin = 0; private $ladderWinsCoin = 0; private $arenaWinsNoCoin = 0; private $arenaWinsCoin = 0; private $ladderLossesNoCoin = 0; private $ladderLoss
我是
PHP的新手,我无法访问一些类变量.
我有这门课: class emptyClass { private $ladderWinsNoCoin = 0; private $ladderWinsCoin = 0; private $arenaWinsNoCoin = 0; private $arenaWinsCoin = 0; private $ladderLossesNoCoin = 0; private $ladderLossesCoin = 0; private $arenaLossesNoCoin = 0; private $arenaLossesCoin = 0; public function getProperty($property) { if (property_exists($this,$property)) { return $this->$property; } } public function upOne($property) { if (property_exists($this,$property)) { $this->$property=($property+1); } } public function setProperty($property,$value) { if (property_exists($this,$property)) { $this->$property = $value; } } } 然后我在一个数组中创建它的9个实例 /* Create classes in an array so we can call them with strings from the database*/ $classes = array( 'Druid' => new emptyClass,'Hunter' => new emptyClass,'Mage' => new emptyClass,'Paladin'=> new emptyClass,'Priest' => new emptyClass,'Rogue' => new emptyClass,'Shaman' => new emptyClass,'Warlock'=> new emptyClass,'Warrior'=> new emptyClass ); 接下来我想增加类变量的值以匹配从数据库获得的数据,这就是我想出的 foreach ($games as $game){ // Go through the games array from the database $gameID = current($game); // Unused (for now) $heroClass = (string)next($game); $villainClass = (string)next($game); // Unused (for now) $win = (int)next($game); $coin = (int)next($game); $ladder = (int)next($game); //Add up the values in the class objects if ($ladder==1&&$coin==1&&$win==1){ // Ladder win with coin $classes[$heroClass] -> {upOne($ladderWinsCoin)}; } else if ($ladder==1&&$coin==1&&$win==0){ // Ladder loss with coin $classes[$heroClass] -> {upOne($ladderLossesCoin)}; } else if ($ladder==1&&$coin==0&&$win==1){ // Ladder win without coin $classes[$heroClass] -> {upOne($ladderWinsNoCoin)}; } else if ($ladder==1&&$coin==0&&$win==0){ // Ladder loss without coin $classes[$heroClass] -> {upOne($ladderLossesNoCoin)}; } else if ($ladder==0&&$coin==1&&$win==1){ // Arena win with coin $classes[$heroClass] -> {upOne($arenaLossesCoin)}; } else if ($ladder==0&&$coin==1&&$win==0){ // Arena loss with coin $classes[$heroClass] -> {upOne($arenaLossesCoin)}; } else if ($ladder==0&&$coin==0&&$win==1){ // Arena win without coin $classes[$heroClass] -> {upOne($arenaWinsNoCoin)}; } else if ($ladder==0&&$coin==0&&$win==0){ // Arena loss without coin $classes[$heroClass] -> {upOne($arenaLossesNoCoin)}; } $game是数据库中的数组,看起来像这样 [1,’法师’,’德鲁伊’,1,1] 当它运行时,我得到一个致命的错误 PHP致命错误:在第48行的/home/vooders/public_html/gameReader.php中调用未定义的函数setProperty() 编辑: 所以在尝试重命名getter / setter之后我仍然会遇到致命的错误,所以现在我确定它是如何调用这些对象的. 我会试着通过我的想法来谈谈你 $classes [$heroClass] – > {upOne($ladderWinsCoin)}; 如果我们在上面这一行,$heroClass将是这个例子’Mage’中来自数据库的字符串. 现在我想使用这个字符串从$classes数组中调用正确的对象,然后将适当的变量增加1. 解决方法//it should work now <? class emptyClass { private $ladderWinsNoCoin = 5; private $ladderWinsCoin = 0; private $arenaWinsNoCoin = 0; private $arenaWinsCoin = 0; private $ladderLossesNoCoin = 0; private $ladderLossesCoin = 0; private $arenaLossesNoCoin = 0; private $arenaLossesCoin = 0; public function getProperty($property) { if (property_exists($this,$property)) { return $this->$property; } } public function setProperty($property,$value) { if (property_exists($this,$property)) { $this->$property = $value; } } public function upOne($property) { if (property_exists($this,$property)) { $this->$property++; } } } $classes = array( 'Druids' => new emptyClass,'Elfos' => new emptyClass ); $classes["Druids"]->setProperty("ladderWinsNoCoin",50); echo $classes["Druids"]->getProperty("ladderWinsNoCoin") . "<br>"; $classes["Druids"]->upOne("ladderWinsNoCoin"); echo $classes["Druids"]->getProperty("ladderWinsNoCoin"). "<br>"; $classes["Elfos"]->setProperty("ladderLossesCoin",25); echo $classes["Elfos"]->getProperty("ladderLossesCoin"). "<br>"; $classes["Elfos"]->upOne("ladderLossesCoin"); echo $classes["Elfos"]->getProperty("ladderLossesCoin"). "<br>"; //50 //51 //25 //26 ?> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |