4

私はしばらく探していましたが、答えが見つかりませんでした.PHPで変数クラスを初期化するこれら2つの方法の違いは何ですか?:(ある場合)

class MyClass
{
    private $myVariable='something';

    public function __construct()
    {

    }
}

class MyClass
{
    private $myVariable;

    public function __construct()
    {
        $this->myVariable='something';
    }
}
4

4 に答える 4

3
  • クラスのデフォルト値で変数を初期化する場合は、方法 1 を選択します。
  • 外部の値で変数を初期化する場合は、コンストラクターを介して変数を渡し、方法 2 を選択します。
于 2012-10-30T19:15:19.307 に答える
2

このシナリオを参照してください:

class Parent {
    protected $property1; // Not set
    protected $property2 = '2'; // Set to 2
    public function __construct(){
        $this->property1 = '1'; // Set to 1
    }
} // class Parent;

class Child extends Parent {
    public function __construct(){
        // Child CHOOSES to call parent constructor
        parent::__construct(); // optional call (what if skipped)
        // but if he does not, ->property1 remains unset!
    }
} // class Child;

これが 2 つの呼び出しの違いです。親から継承する子クラスでは、parent::__construct() はオプションです。そう:

  • 事前設定が必要なスカラー (のように) プロパティがある場合は、それらが子クラスにも存在することを確認するために、クラス定義is_scalar()それ行います
  • 引数に依存するプロパティまたはオプションのプロパティの場合は、それらをコンストラクタに入れます。

それはすべて、コードの機能をどのように設計するかによって異なります。

ここに間違った権利はありません。それはあなたにとって正しいことだけです。

于 2012-10-30T19:29:08.540 に答える
1

遅延読み込みを容易にするために、2 番目の方法のように行うのが好きです。メンバー変数を宣言するときに設定する単純な値。

class WidgetCategory
{
    /** @var array */
    private $items;

    /**
     *
     * @return array
     */
    public function getItems()
    {
        if (is_null($this->items)) {
            $this->items = array();
            /* build item array */
        }
        return $this->items;
    }
}
于 2012-10-30T19:19:53.743 に答える
1

コンストラクターで変数を初期化することを選択しない場合は、定数値のみを使用できます。ここにちょっとした例があります:

define('MY_CONSTANT', 'value');

class MyClass
{ 
    // these will work
    private $myVariable = 'constant value';
    private $constant = MY_CONSTANT;
    private $array = Array('value1', 'value2');

    // the following won't work
    private $myOtherVariable = new stdClass();
    private $number = 1 + 2;
    private $static_method = self::someStaticMethod();

    public function __construct($param1 = '')
    {
        $this->myVariable = $param1;

        // in here you're not limited
        $this->myOtherVariable = new stdClass();
        $this->number = 1 + 2;
        $this->static_method = self::someStaticMethod();
    }
}

このマニュアルページを見て、プロパティに直接割り当てることができる値を確認してください: http://php.net/manual/en/language.oop5.properties.php

もっと違いがあるかもしれません...

于 2012-10-30T19:13:42.810 に答える