我正在尝试使用json_decode用数据填充2D数组。但是,它似乎加载正确,但是当我尝试获取特定值时,即使它不是,它也会返回null。
我的2dtestarray.php:
<?php
class testarray {
public static $listConfigs;
public function __construct() {
$this->listConfigs = json_decode(file_get_contents('configuration.json'), true);
}
public static function getValue($list, $property) {
return self::$listConfigs[$list][$property];
}
public function save() {
file_put_contents('configuration.json',json_encode($listConfigs));
}
}
?>
我的testload.php:
<?php
require_once("2darraytest.php");
$ta = new testarray();
var_dump($ta->getValue('main', 'canView'));
var_dump($ta->listConfigs);
$test = json_decode(file_get_contents('configuration.json'), true);
var_dump($test);
$mainList = $test['main']['canView'];
echo $mainList;
?>
我的configuration.json:
{"main":{"canView":"true"},"secondary":{"canView":"false"}}
testload.php的输出:
NULL
array(2) { ["main"]=> array(1) { ["canView"]=> string(4) "true" } ["secondary"]=> array(1) { ["canView"]=> string(5) "false" } }
array(2) { ["main"]=> array(1) { ["canView"]=> string(4) "true" } ["secondary"]=> array(1) { ["canView"]=> string(5) "false" } }
true
最后,我的问题,这就是为什么“var_dump($ ta-&gt; getValue('main','canView'));”返回null而不是像“$ mainList = $ test ['main'] ['canView']; echo $ mainList;”呢?
答案 0 :(得分:0)
您正在访问getValue
中的静态属性:
self::$listConfigs[$list][$property]
但访问$ta->listConfigs
中的实例属性。构造函数将值设置为实例属性。
$this->listConfigs = json_decode(file_get_contents('configuration.json'), true);
因此,这会导致实例同时访问静态self::$listConfigs
和实例属性$this->listConfigs
。
尝试更改构造函数以使用静态属性。
public function __construct() {
self::$listConfigs = json_decode(file_get_contents('configuration.json'), true);
}