为了账号安全,请及时绑定邮箱和手机立即绑定

如何对实体进行动态设置数据?

如何对实体进行动态设置数据?

PHP
暮色呼如 2022-09-17 22:01:10
我想为对象设置许多JSON数据,但我不想写很多设置方法。例://(POST : JSON DATA) JSON keys equals entity variable names{"data1": "banana","data2": "index, follow","data3": "true","data4": "abcdef","data5": "false","big_data1": "lorem ipsum ....""name": "apple"  ....}我的实体(简短版)class Category{ //.... private $data1; public setData1(string $data1): self{  $this->data1 = $data1;  return $this; } public getData1():string{ return $this->data1; } //...}我的控制器//...public function index(){  //post data json to object  $data = json_decode($postdata); # data object  $category = new Category(); # new category class  $object = new \ReflectionObject($category);  /**     What is the next step?     $this->setData1($data->data1);     $this->setData2($data->data2);     if(!empty($data->big_data12)       $this->setBigData12($data->big_data12)     .     .     .     $this->setData12($data->data12)  */}如何做一个简单的方法?如何避免编写许多集合方法?
查看完整描述

1 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

根本不需要使用反射。你可以使用神奇的方法。具体说来。文档。_call()


一个非常简单、幼稚的实现:


class Category

{

    private $data1;

    private $data2;

    private $data3;

    private $bigData12;


    public function __call($method, array $arguments)

    {

        $verb = substr($method, 0, 3);

        $noun = lcfirst(substr($method, 3));


        if (!property_exists($this, $noun)) {

            throw new Exception('Property does not exist');

        }


        switch($verb) {

            case 'set':

                $this->$noun = $arguments[0];

                return $this;


            case 'get':

                return $this->$noun;

        }

    }


}


$cat = new Category();

$cat->setData1('hello')

    ->setData2('hola')

    ->setData3(12345)

    ->setBigData12('hello world');


echo $cat->getData1(), "\n";

echo $cat->getData2(), "\n";

echo $cat->getData3(), "\n";

echo $cat->getBigData12(), "\n";

你可以在这里看到它的工作原理。


请注意,我不建议这样做太多。这种事情非常容易出错,不能被类型暗示,收益从微不足道到根本不存在。


查看完整回答
反对 回复 2022-09-17
  • 1 回答
  • 0 关注
  • 109 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信