为什么要将变量传递给类而不是方法

时间:2014-03-10 10:17:24

标签: php oop

我想知道将参数传递给类而不是方法有什么好处。

就代码而言,这样做有什么好处:

$books = new Books($book_id, $book_name);

而不是

$books = new Books;
$books->setBook($book_id, $book_name);

谢谢!

3 个答案:

答案 0 :(得分:6)

“传递到课堂”不是一件事。 new Foo($bar, $baz)正在实例化一个新对象并将参数传递给构造函数方法

class Foo {

    public function __construct($bar, $baz) {
        ...
    }

}

将参数传递给常规方法和构造函数之间没有区别。唯一的区别是在实例化对象时调用构造函数,以后随时调用其他方法。

您应该将参数传递给构造函数,该构造函数在构造时需要对象。通常,这意味着您传递对象完全可用的参数。如果构造函数不喜欢参数,则它可以抛出异常,这意味着对象根本无法实例化。这可以保证对象处于已知的一致状态。比较:

$api = new FooAPI($id, $password);
$api->doSomething();

$api = new FooAPI;
// $api->setId($id);
// $api->setPassword($password);
$api->doSomething();  // Error! No id and password given

答案 1 :(得分:1)

虽然@deceze的答案涵盖了主要事实,但我还想说明最重要的一点 - 也许是强调

来自here

的释义
  

每个具体对象都有一个带签名的构造函数   表示消费者应如何完全实例化对象。

答案 2 :(得分:0)

如果您将看到相同代码片段的汇编代码,您会注意到它会增加5-6条左右的指令,所以它取决于您想要哪种方法。但通常情况下,如果您喜欢第一个方法在创建对象时知道实例变量的值,否则第二个更喜欢在处理器上保存5-6条指令的负载。我已用c ++编写了两个代码片段并分析了它们的汇编代码。