1.
В приведенном ниже классе с именем Get_category я пытаюсь получить доступ к переменной массива с именем $ arr из другого класса под названием Категоризация. Но каждый раз, когда я запускаю свой класс Get_category, появляется ошибка (та, что в заголовке), говорящая о том, что он не распознает класс Категоризация.
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;}
}
Это другой класс Категоризация, из которого я пытаюсь получить доступ к переменной.
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
импортируется в начало файла следующим образом:
include_once 'path/to/Categorizeclass'
например в верхней части controllers/get_category.php
Добавь это :
include_once __DIR__.'/categorize.php';
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
функционировать самостоятельно, так как вы знаете о вашей структуре папок.