注意:未定义的变量:第9行中的/opt/lampp/htdocs/IRIS/controllers/get_category.php中的arr

问题描述:

我试图从另一个类获取对一个静态变量的访问,但是我一直收到一个错误(在标题),说我的变量没有被识别。注意:未定义的变量:第9行中的/opt/lampp/htdocs/IRIS/controllers/get_category.php中的arr

下面是我的群归类所在班级的静态变量,这是一个数组名为$ ARR,位于:

 class Categorize extends Controller{ 
     public static $arr = array(); 
     function run($xml){ 
       global $FILE_ROOT, $STORAGE, $REQ_ID, $CMD_EXTRA, $LIB, 
$BIN; 

       $numCategories = intval($xml->numCategories); 
       self::$arr; 
       /*self::$arr = array();*/ 

       /*if(!pe($xml, "resourceList")) die(err("No resources found"));*/ 

       for($i=0;$i < $numCategories; $i++){ 
        $name = intval($xml->nameCat); 
         if($i=0){ 
          $arr[0][0] = $name; 
         }else{ 
          $arr[$i][0] = $name; 
         } 

       } 
       $j = 0; 
       while($j < $numCategories){ 
        $numDoc = intval($xml->numDoc); 
         $k = 0; 
         foreach($xml->resourceList->resource as $res){ 
            $arr[$j][$k] = $res; 
            $k++; 
         } 
        $j++;   
       } 
      $output = "Done!"; 
      $response = "<parameters><requestType>categorize</requestType><requestID>". $REQ_ID . "</requestID><resourceList>". $output . "</resourceList></parameters>"; 

      return $response; 
     } 
} 

这里是一个叫Get_category课堂,我试图访问从静态变量$ ARR我的分类类:

 class Get_category extends Controller{ 
      function run($xml){ 
      global $FILE_ROOT, $STORAGE, $REQ_ID, $CMD_EXTRA, $LIB, 
      $BIN; 
      include_once __DIR__.'/categorize.php'; 
      $file = $xml->filename; 
      Categorize::$arr; 
      /*$arrlength = count($arr);*/ 
      $arrlength = max(array_map('count', $arr)); 
      $response = "<parameters>\n<requestID>" . $REQ_ID ."</requestID>\n<requestType>get_category</requestType>"; 

      for($i = 0; $i < $arrlength; $i++){ 
      $lengthcolumn = count($arr[$i]); 
      for($j = 0; $j < $lengthcolumn; $j++){ 
       if($arr[$i][$j] == $file){ 
       echo $arr[$i][$j]; 
       $response .= "<resource><id>" . $arr[$i][$j] . "</id>"; 
     $response .= "</resource>"; 
       } 

      } 

     } 

     $response .= "</parameters>"; 

     return $response; 

     } 

} 

我不明白为什么我的$ arr变量无法识别。

+1

可能的[PHP:“Notice:Undefined variable”,“Notice:Undefined index”和“Notice:Undefined offset”]重复(https://*.com/questions/4261133/php-notice-undefined- variable-notice-undefined-index-and-notice-undef) – Qirel

您似乎忘记分配$arr = Categorize::$arr;

Categorize::$arr; 
/*$arrlength = count($arr);*/ 
$arrlength = max(array_map('count', $arr)); 

在PHP中使用常规变量语法,你不能访问类属性。使用self::$property访问静态属性,使用$this->property访问对象属性。

因此,如果你有$arr它应该是self::$arr。您发布的两个功能都需要此更改。它不会在第一个函数中导​​致错误,因为它将变量赋值给变量而不是读取它,所以它也会创建变量。但是我认为其意图是填写public static $arr属性,这是因为访问不正确而导致的。

class Categorize extends Controller{ 

    public static $arr = array(); 

    function run($xml){ 
     global $FILE_ROOT, $STORAGE, $REQ_ID, $CMD_EXTRA, $LIB, 
      $BIN; 

     $numCategories = intval($xml->numCategories); 
     self::$arr; 
     /*self::$arr = array();*/ 

     /*if(!pe($xml, "resourceList")) die(err("No resources found"));*/ 

     for($i=0;$i < $numCategories; $i++){ 
      $name = intval($xml->nameCat); 
      if($i=0){ 
       self::$arr[0][0] = $name; 
      }else{ 
       self::$arr[$i][0] = $name; 
      } 

     } 
     $j = 0; 
     while($j < $numCategories){ 
      $numDoc = intval($xml->numDoc); 
      $k = 0; 
      foreach($xml->resourceList->resource as $res){ 
       self::$arr[$j][$k] = $res; 
       $k++; 
      } 
      $j++;   
     } 
     $output = "Done!"; 
     $response = "<parameters><requestType>categorize</requestType><requestID>". $REQ_ID . "</requestID><resourceList>". $output . "</resourceList></parameters>"; 

     return $response; 
    } 
} 

class Get_category extends Controller{ 
    function run($xml){ 
     global $FILE_ROOT, $STORAGE, $REQ_ID, $CMD_EXTRA, $LIB, 
      $BIN; 
     include_once __DIR__.'/categorize.php'; 
     $file = $xml->filename; 
     /*self:$arrlength = count(self:$arr);*/ 
     $arrlength = max(array_map('count', self::$arr)); 
     $response = "<parameters>\n<requestID>" . $REQ_ID ."</requestID>\n<requestType>get_category</requestType>"; 

     for($i = 0; $i < self::$arrlength; $i++){ 
      $lengthcolumn = count(self::$arr[$i]); 
      for($j = 0; $j < $lengthcolumn; $j++){ 
       if(self::$arr[$i][$j] == $file){ 
        echo self::$arr[$i][$j]; 
        $response .= "<resource><id>" . self::$arr[$i][$j] . "</id>"; 
        $response .= "</resource>"; 
       } 

      } 

     } 

     $response .= "</parameters>"; 

     return $response; 

    } 

} 

这是PHP和一些其他OOP语言(如C++和Java)之间的显着差异。请参阅Could not retrieve a property of class in PHP以解释此原因。

+0

我应该在哪里放置自己:$ arr在第二个类中? –

+0

每个你现在有'$ arr'的地方。 – Barmar

+0

明白了,错误现在被删除了!但现在我得到了一个不同的错误:致命错误:未捕获错误:访问未声明的静态属性:Get_category :: $ arr在/opt/lampp/htdocs/IRIS/controllers/get_category.php:9 –