массивы — Примечание: неопределенная переменная: arr в /opt/lampp/htdocs/IRIS/controllers/get_category.php в строке 9

Я пытаюсь получить доступ к статической переменной из другого класса, но продолжаю получать ошибку (ту, которая в заголовке), которая говорит, что моя переменная не распознается.

Ниже мой класс Категоризации, где находится статическая переменная, которая является массивом с именем $ 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 не распознается.

0

Решение

Похоже, вы забыли назначить $arr = Categorize::$arr;

Categorize::$arr;
/*$arrlength = count($arr);*/
$arrlength = max(array_map('count', $arr));
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 и некоторыми другими языками ООП, такими как C ++ и Java. Увидеть Не удалось получить свойство класса в PHP для моего объяснения обоснования этого.

0

По вопросам рекламы [email protected]