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类本身可能有问题吗?
答案 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.php
和Get_Category.class.php
中,并且它们放在/classes
文件夹中,您可以使用以下内容:
spl_autoload_register(function($class){
require_once(sprintf("/classes/%s.class.php", $class));
}
这将为PHP提供一个匿名函数,PHP可以为其提供未知类的名称,因此您可以自己调用require
或include
函数,因为您了解了文件夹结构。