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

JDe*_*age 1 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;
        }
...
Run Code Online (Sandbox Code Playgroud)

注意如何$args定义为中的数组__construct.为什么选择这种方法而不是$args在var列表中定义:

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

        function __construct($label, $link, $args) {
            $this->label=$label;
            $this->link=$link;
            $this->args=$args;
        }
...
Run Code Online (Sandbox Code Playgroud)

Mik*_*e B 6

在第一个示例中,$args是可选的.的构造可以与仅2个参数为被调用$label$link,以及$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;
        }
Run Code Online (Sandbox Code Playgroud)