假设Php的一个类中的方法有一个参数, 这个参数可以是 实例对象 吗?

没用强类型的话,可以传实例对象进去吗? 如果是这样是为了什么,有哪些应用?一般穿的都是string,数组,变量,但是传实例化的对象进去,作为小白不是太明白。

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
最佳答案
class Controller{
    // 通过 Service 类来分解逻辑
    public function action(Service $service){
          return $service->run();
    }
}

class Service{
     public function run(){
          // do something....
          // do something....
          // do something....
     }
}

$controller = new Controller();
$controller->action(new Service());
class Controller{
    // 所有的逻辑都在一个 action 里写完
    public function action(){
          // do something....
          // do something....
          // do something....
    }
}
$controller = new Controller();
$controller->action();

简单理解:当你 do something do得足够多的时候,第一种方式可以很好的给你的代码解耦,通过依赖多个类来实现你的 action,各个类各司其职

3年前 评论
讨论数量: 2
class Controller{
    // 通过 Service 类来分解逻辑
    public function action(Service $service){
          return $service->run();
    }
}

class Service{
     public function run(){
          // do something....
          // do something....
          // do something....
     }
}

$controller = new Controller();
$controller->action(new Service());
class Controller{
    // 所有的逻辑都在一个 action 里写完
    public function action(){
          // do something....
          // do something....
          // do something....
    }
}
$controller = new Controller();
$controller->action();

简单理解:当你 do something do得足够多的时候,第一种方式可以很好的给你的代码解耦,通过依赖多个类来实现你的 action,各个类各司其职

3年前 评论
秦晓武

其实对象也是一种约束和提示(就像 int, string那样)。

比如有个类方法是负责数据库插入:

public function create($data){
    $model = new Model();
    $model->name = $data['name'];
    $model->save();
}

然后想进行一定的验证拦截,或者参数提示,就可以写成这样:

public function create(string $name, string $mobile){
    $model = new Model();
    $model->name = $name;
    $model->mobile = $mobile;
    $model->save();
}

在字段很多的情况下,参数列表会很长,可以用个对象封装参数(用数组的话,要用isset检测key,很麻烦):

public function create(Data $data){
    $model = new Model();
    $model->name = $data->name;
    $model->mobile = $data->mobile;
    // ...
    $model->save();
}

最后对象这个东西,耦合性太强,就变成接口了:

public function create(DataInterface $data_interface){
    $model = new Model();
    $model->name = $data_interface->getName();
    $model->mobile = $data_interface->getMobile();
    // ...
    $model->save();
}
3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!