3

これに近い質問がたくさんあることを私は知っています。ただし、単純な質問に対する答えを見つけることができませんでした (コンストラクターから値を返すことについて質問しているのではなく、コンストラクターが何を返す必要があるかを理解していると思います)。

returnwithin の使用を避ける理由はあります__constructか?

または、次の理由により、将来壊れることのない、完全に受け入れられるコーディング スタイルですかreturn

class A {
    protected $tristate = null;
    function __construct() {
        // Constructor returns instance of class automatically
        // no need to `return $this`
    }
    protected function Logic() {
        return rand(0, 1) === 1;
    }
}

class B extends A {
    function __construct() {
        parent::__construct();
        if ($this->Logic()) return;
        $this->tristate = true;
    }
}

上記の 1 つがテストされ、(私の開発環境内で) 期待どおりに動作し、親$tristate変数 50/50 を NULL/TRUE に設定しますが、将来的には動作し、コンストラクターの途中でvoid return.

頭に浮かんだもう1つのことは、通常はvoidreturn $thisであるプレーンの代わりに使用する必要があるということですが、PHPはとにかくインスタンスを返すようです。答えは、両方とプレーンが同じくらい良いreturnということかもしれません。return $thisreturn

4

3 に答える 3

3

これに影響はなく、今後もそうなるとは思いません。コンストラクターからいつでも何でも返すことができます。戻り値がある場合は無視されます。

于 2012-10-12T21:52:57.980 に答える
2

ドキュメントから

コンストラクターvoid__construct([mixed $ args [、$。。。]])

および 疑似型定義から

戻り型としてのvoidは、戻り値が役に立たないことを意味します。

だからあなたは何でも返すことができます...しかしそれはuselessです。あなたの場合、return関数の実行を終了するために機能します:それは単に許可されています。

もう1つの質問は、それが良い習慣なのか悪い習慣なのかということです...

return ;単純なものは、IFステートメントと煩わしいインデントを保存するための良い習慣だと思います。価値のある返品(つまりreturn false;)が役に立たない場合は、意味がないため、悪い習慣です。

于 2012-10-12T22:03:20.113 に答える
0

どのメソッドも早期に実行されないようにすることは、経験則として適切returnです。つまり、6 か月後に 1500 行の関数に戻ったときに、本来は書くべきではなかったとわかっているのに、それを実行したことを意味します。とにかく、愚かなことがどのように機能するかを理解するための悪夢のような時間がわずかに少なくなります:)

否定されたロジック チェックを使用するif ( ! $this->Logic() )と、早期に戻るのと同じ効果が得られますが、メソッドの途中でランダムにドロップアウトすることは決してないことを知って、コードに戻ることができます。

もちろん、「やってはいけないことはわかっている」という小さな声以外は、あなたがそれをやることを止めるものは何もありませんが、「ああ、大丈夫、あなたはそれを覚えているでしょう!」という別の声があります. 2 番目の声を聞かず、適切に実行してください :P


return明確にするための簡単な更新-コンストラクターで ingを回避する技術的な理由はありません(キーワードはオブジェクトを返すように強制し、コンストラクターが返すものをオーバーライドします)、そうしないnew優れた論理的理由があります。

于 2012-10-12T21:53:41.860 に答える