php中api的类属性可见性
我有一个带有私有属性的类任务和一些getter/setterphp中api的类属性可见性,php,api,Php,Api,我有一个带有私有属性的类任务和一些getter/setter class Task { private $id; private $title; private $done; private $user_id; private $parent_id; /** * @return int */ public function getId(): int { return $this->id;
class Task
{
private $id;
private $title;
private $done;
private $user_id;
private $parent_id;
/**
* @return int
*/
public function getId(): int
{
return $this->id;
}
/**
* @param mixed $id
*
* @return Task
*/
public function setId($id): Task
{
$this->id = $id;
return $this;
}
/**
* @return mixed
*/
public function getTitle(): string
{
return $this->title;
}
/**
* @param mixed $title
*
* @return Task
*/
public function setTitle($title):Task
{
$this->title = $title;
return $this;
}
/**
* @return mixed
*/
public function getDone(): bool
{
return $this->done;
}
/**
* @param mixed $done
*
* @return Task
*/
public function setDone($done):Task
{
$this->done = $done;
return $this;
}
/**
* @return mixed
*/
public function getUserId(): string
{
return $this->user_id;
}
/**
* @param mixed $done
*
* @return Task
*/
public function setUserId($user_id):Task
{
$this->user_id = $user_id;
return $this;
}
/**
* @return mixed
*/
public function getParentId(): string
{
return $this->parent_id;
}
/**
* @param mixed $done
*
* @return Task
*/
public function setParentId($parent_id):Task
{
$this->parent_id = $parent_id;
return $this;
}
}
我想公开所有这些属性(我正在尝试制作一个api)
这里举例说明这个类的用法
public function index()
{
$taskManager = new TaskManager();
$tasks = $taskManager->selectWhere('parent_id IS NULL');
foreach ($tasks as $key => $task){
$taskId = $task->getId();
$subtask = $taskManager->selectWhere("parent_id = $taskId");
$tasks[$key]->subtasks = $subtask;
}
echo '<pre>';
var_dump($tasks);
echo '</pre>';
header('HTTP/1.1 200 Created');
header('Content-Type:application/json');
return json_encode($tasks->getDataForApi());
}
公共功能索引()
{
$taskManager=新建taskManager();
$tasks=$taskManager->selectWhere('parent_id为NULL');
foreach($key=>$task的任务){
$taskId=$task->getId();
$subtask=$taskManager->selectWhere(“父任务id=$taskId”);
$tasks[$key]->subtask=$subtask;
}
回声';
变量转储($tasks);
回声';
标题(“HTTP/1.1200已创建”);
标题('Content-Type:application/json');
返回json_encode($tasks->getDataForApi());
}
我正在使用postman测试我的api,如果我在works中公开所有属性,但我认为这不是一个好方法
我应该在课堂任务中公开所有这些属性吗?还是有其他解决方案?这是否回答了您的问题@WesleySmith嗯,我的问题是将我的属性的private改为public这就是问题所在,如果您的类实现了
JsonSerializable
接口并提供了jsonSerialize
方法,您可以完全控制类的JSON表示中包含哪些属性,而无需更改任何有关您的私有属性的内容和PHP将自动为集合中的每个class对象调用类的jsonSerialize
方法,您可以从类中准确返回所需的内容,包括任何私有属性值,因为它是从类本身的上下文调用的,该类本身可以访问所有这些内容