注意:未定义的变量:第9行中的/opt/lampp/htdocs/IRIS/controllers/get_category.php中的arr
我试图从另一个类获取对一个静态变量的访问,但是我一直收到一个错误(在标题),说我的变量没有被识别。注意:未定义的变量:第9行中的/opt/lampp/htdocs/IRIS/controllers/get_category.php中的arr
下面是我的群归类所在班级的静态变量,这是一个数组名为$ 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变量无法识别。
您似乎忘记分配$arr = Categorize::$arr;
Categorize::$arr;
/*$arrlength = count($arr);*/
$arrlength = max(array_map('count', $arr));
在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以解释此原因。
我应该在哪里放置自己:$ arr在第二个类中? –
每个你现在有'$ arr'的地方。 – Barmar
明白了,错误现在被删除了!但现在我得到了一个不同的错误:致命错误:未捕获错误:访问未声明的静态属性:Get_category :: $ arr在/opt/lampp/htdocs/IRIS/controllers/get_category.php:9 –
可能的[PHP:“Notice:Undefined variable”,“Notice:Undefined index”和“Notice:Undefined offset”]重复(https://stackoverflow.com/questions/4261133/php-notice-undefined- variable-notice-undefined-index-and-notice-undef) – Qirel