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

时间:2017-08-10 19:51:36

标签: php arrays variables static undefined-variable

我试图从另一个类访问一个静态变量,但我不断收到错误(标题中的那个),表示我的变量未被识别。

下面是我的Categorize类,其中静态变量是一个名为$ 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的类,我试图从我的Categorize类中访问静态变量$ 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变量无法识别。

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

在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