php – Slim框架无法使用受保护的变量编码为json
发布时间:2020-12-13 21:56:02 所属栏目:PHP教程 来源:网络整理
导读:基本上我用json编写了一个响应,并且无法弄清楚为什么它一直返回正确数量的数组成员但它们是空的. $app-get('/api/server_list',function ($request,$response,$args) { $serverlist = new ServerListing($this-db); $servers = $serverlist-getServers(); $n
基本上我用json编写了一个响应,并且无法弄清楚为什么它一直返回正确数量的数组成员但它们是空的.
$app->get('/api/server_list',function ($request,$response,$args) { $serverlist = new ServerListing($this->db); $servers = $serverlist->getServers(); $newResponse = $response->withJson($servers); return $newResponse; }); 这是上面的输出,添加了print_r($servers) [{},{}]Array ( [0] => ServerEntity Object ( [id:protected] => 1 [serverName:protected] => dc1.domain.com ) [1] => ServerEntity Object ( [id:protected] => 2 [serverName:protected] => dc2.domain.com ) ) 以下是ServerListing的类代码: <?php class ServerListing extends Listing { public function getServers() { $sql = "SELECT * from servers"; $stmt = $this->db->query($sql); $results = []; while($row = $stmt->fetch()) { $results[] = new ServerEntity($row); } return $results; } } 这是ServerEntity: <?php class ServerEntity { public $id; public $serverName; public function __construct(array $data) { if(isset($data['id'])) { $this->id = $data['id']; } $this->serverName = $data['name']; } public function getId() { return $this->id; } public function getServerName() { return $this->serverName; } } 唯一的方式是与公众合作. 我理解公共/私人/受保护.虽然这是我第一次使用框架和面向对象的php. 在另一个路由中使用相同的数据库调用,然后我可以将服务器列表传递给视图,它工作正常. 所以我猜两个问题. >为什么json编码失败? 解决方法
Slim的
Response::withJson() 没有做任何魔术.它依赖于PHP函数
json_encode() 来进行编码. json_encode()也不知道任何特殊技巧.如果您将一个对象传递给它进行编码,它将获得它可以从中获取的所有数据.这仅仅意味着它的公共属性,因为这就是OOP的工作原理.
但是,如果在类中实现 例如: class ServerEntity implements JsonSerializable { private $id; private $serverName; // ... your existing code here public function jsonSerialize() { return array( 'id' => $this->id,'name' => $this->serverName,); } } 一些测试代码: echo(json_encode(new ServerEntity(array('id' => 7,'name' => 'foo')))); 输出是: {"id":7,"name":"foo"} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |