Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.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
Php 从数组访问类变量_Php - Fatal编程技术网

Php 从数组访问类变量

Php 从数组访问类变量,php,Php,我是PHP新手,访问某些类变量时遇到问题 我有这门课: class emptyClass { private $ladderWinsNoCoin = 0; private $ladderWinsCoin = 0; private $arenaWinsNoCoin = 0; private $arenaWinsCoin = 0; private $ladderLossesNoCoin = 0; private $

我是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、0、1]

当它运行时,我得到一个致命的错误

PHP致命错误:在第48行的/home/vooders/public\u 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
?>

毫无疑问,我建议您不要“在了解类业务的类外部编写代码。”

“我是一个班级。因此,我还活着。告诉我发生了什么事,我会做出相应的反应。问我你想知道什么,我会给你答案。但是:不要插手班级事务,因为你很脆,加上伍斯特沙司味道很好!!”

(1) 不要“从外部”对类的变量指手画脚。告诉类发生了什么,它可能会增加或减少自己的属性。(你说过他们是私人的,不是吗?他们应该是这样的。)


(2) 如果您想知道“答案”,根据简单或复杂的逻辑,答案可能基于一个或多个属性的值,那么类应该包含该逻辑,因为它属于“自身”。

\u set
\u get
是。根据文档-
的规定,除非您想要与这些名称相关联的神奇功能,否则您的任何类中都不能有具有这些名称的函数。
。你明确地给他们打电话,可能是错的。尝试将它们重命名为其他名称。这对于处理您正在处理的多个属性也可能很有用。为此干杯,您是对的!我制作了一个类函数来增加值。不确定为什么我没有开始,但我仍然在调用对象开始时遇到相同的问题。尝试重命名具有相同效果的函数,因此我调用的对象是错误的,我想非常感谢!这就是我做错的地方。我传递的变量是
$ladderWinsCoin
,而不是字符串
'ladderWinsNoCoin'
,再次感谢