为什么要在__construct中而不是在var列表中定义实例var的类型?

时间:2011-07-06 17:33:05

标签: php oop

我正在阅读一些看起来像这样的代码:

Class_Menu.php:

<?php
    class Menu {
        private $label;
        private $link;
        private $args;

        function __construct($label, $link, $args=array()) {
            $this->label=$label;
            $this->link=$link;
            $this->args=$args;
        }
...

请注意$args__construct如何定义为数组。为什么选择这种方法而不是在var列表中定义$args

<?php
    class Menu {
        private $label;
        private $link;
        private $args=array();

        function __construct($label, $link, $args) {
            $this->label=$label;
            $this->link=$link;
            $this->args=$args;
        }
...

3 个答案:

答案 0 :(得分:6)

在第一个示例中,$args是可选的。可以仅使用$label$link的2个参数调用构造函数,并将$args定义为空数组。

在第二个示例中,$args参数是必需的。

(意见):我会在构造函数中留下$args = array()并且在声明属性时很容易一眼就知道var $ args是什么类型。

<?php
    class Menu {
        private $label;
        private $link;
        private $args = array();

        function __construct($label, $link, $args=array()) {
            $this->label=$label;
            $this->link=$link;
            $this->args=$args;
        }

答案 1 :(得分:2)

一个允许你使用带有两个或三个参数的构造函数(因为第三个是可选)。

另一个没有。

为什么不阅读the manual entry on function arguments

答案 2 :(得分:2)

这只会使$args成为可选项。如果构造函数被称为new Menu('a', 'b'),则args将被定义为空数组,并且不会引发有关缺失参数的错误。