致命错误:未捕获错误:在/opt/lampp/htdocs/IRIS/controllers/get_category.php:7

时间:2017-08-08 18:32:13

标签: php xml class variables static-variables

1。           在下面的类Get_category中,我试图从另一个名为Categorize的类中访问一个名为$ arr的数组变量。但每次运行我的Get_category类时,都会显示一个错误(标题中的错误),表示它无法识别Categorize类。

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

         $file = $xml->filename;
         Categorize::$arr;
         $arrlength = 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; 


    }    
}

这是我尝试从中访问变量的另一个类Categorize。

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


              $numCategories = intval($xml->numCategories);
              static $arr = array();
              /*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;
       }
}

出于某种原因,我不断收到标题中列出的错误,我不知道为什么?我一直试图让我的$ arr变量静态,我一直在使用正确的符号来获取我的静态变量。它说它不能识别get_Category中的Categorize,所以我不知道如何修复它,以便它意识到我正在尝试访问当前类之外的类。我的Categorize类本身可能有问题吗?

2 个答案:

答案 0 :(得分:0)

将包含类Categorize的文件包含在文件顶部,如下所示:

include_once 'path/to/Categorizeclass'

例如在controllers/get_category.php的顶部添加:

include_once __DIR__.'/categorize.php';

答案 1 :(得分:0)

PHP需要帮助知道它可以在哪里找到您要加载的类,除非它们位于同一文件中,或者包含或包含所需文件。函数spl_autoload_register()用于提供PHP可用于解决此问题的函数。

例如,如果您的课程整齐地放在单个文件Categorize.class.phpGet_Category.class.php中,并且它们放在/classes文件夹中,您可以使用以下内容:

spl_autoload_register(function($class){
    require_once(sprintf("/classes/%s.class.php", $class)); 
}

这将为PHP提供一个匿名函数,PHP可以为其提供未知类的名称,因此您可以自己调用requireinclude函数,因为您了解了文件夹结构。