0

__construct()括弧内にこのようなタイプのヒントを表示するのを妨げるものはありますか?

<?php

    class SomeClass extends BaseClass {

        public function __construct(array $someArray) {

            parent::__construct($someArray);
        }

それとも私はこのようにしかできませんか?

<?php

    class SomeClass extends BaseClass {

        public function __construct($someArray = array()) {

            parent::__construct($someArray);
        }

編集:

これが機能します:(@hakraと@Leighに感謝します)

<?php

    class SomeClass extends BaseClass {

        public function __construct( array $someArray = NULL ) {

            parent::__construct( (array) $someArray);
        }

私にはそれは素晴らしくてきれいに見えます、そして私はそれが何を意味するべきかを正確に知っています。

4

2 に答える 2

7

これはデフォルトのないタイプヒントであり、パラメータを指定する必要があり、そのタイプは配列である必要があることを示しています

public function __construct(array $someArray) {


これは、タイプヒントなしでパラメーターが渡されない場合の引数のデフォルト値を提供します。

public function __construct($someArray = array()) {


それらは2つの異なるものです。

2番目のインスタンスでは、パラメーターなしで関数を呼び出すことができ、それは機能しますが、最初のインスタンスは機能しません。

必要に応じて、2つを組み合わせて、デフォルトを指定し、必要なタイプを指定できます。

public function __construct(array $someArray = array()) {

または、@ hakreが述べているように、次のことができます。

public function __construct(array $someArray = NULL) {

于 2012-08-15T13:19:44.280 に答える
3

あなたはそうすることができます:

public function __construct(array $someArray = NULL)
{
    $someArray = (array) $someArray;
    parent::__construct($someArray);
    ...

ここでのケースは= NULL、ルールの例外を利用することです。次の行:

    $someArray = (array) $someArray;

空の配列に変換するための省略形でNULLあり、それ以外の場合は配列をそのままの状態にします(いわゆるキャストドキュメントから配列へ):

配列に変換NULLすると、空の配列になります。

(from:配列ドキュメントへの変換)

確かにあなたはそれをさらに短く書くことができます:

public function __construct(array $someArray = NULL)
{
    parent::__construct((array) $someArray);
}

しかし、それはそれをうまく説明していません。

于 2012-08-15T13:22:50.477 に答える