2017-09-23 12 views
0

classとそのmember variablesについてよくわかりません。 私の疑問は、同じクラスの別のメンバー変数からメンバー変数を宣言して初期化できますか?この同じクラスの別のメンバー変数からメンバー変数を宣言して初期化することはできますか?

class newClass { 
    private $variable1 = 'new1'; 
    private $variable2 = $variable1.'new2'; 
} 

よう

、私はこのための解決策を見つける助けてくださいことができない場合。 これが間違った質問であれば私を許してください。

答えて

2

常に、メンバー変数をコンストラクタで初期化します。コンストラクタで動的値を割り当てることができます。 このコードをお試しください:

<?php 
class newClass { 
    private $variable1 ; 
    private $variable2; 
    function __construct() 
    { 
     $this->variable1 = 'new1'; 
     $this->variable2 = $this->variable1.'new2'; 
    } 
    function get_data() 
    { 
     echo "var1= ".$this->variable1; 
     echo "<br>"; 
     echo "var2= ".$this->variable2; 
    } 
} 
$obj = new newClass(); 
$obj->get_data(); 
4

いいえ、できません。あなたの代わりに何ができるか

コンストラクタで初期化を行うことである。それはあなたがいるので、コンストラクタ内の任意の計算を行うことを避けるようにしてくださいので、

class Foo 
{ 
    private $a = 'something'; 
    private $b; 

    public function __construct() 
    { 
     $this->b = $this->a . 'foobar'; 

    } 
} 

Buuuut、これは実際には、やや疑問の練習になりますロジックのその部分を実際にテストする能力が失われます(コンストラクタは常に実行されるため、前後の状態を比較する方法はありません)。

もっと良い方法は、ゲッター・メソッドでこのロジックを残すために、次のようになります。このコードで

class Foo 
{ 
    const DEFAULT_VALUE = 'lorem ipsum'; 
    const DEFAULT_PREFIX = '_'; 

    private $bar; 

    public function __construct(string $bar = self::DEFAULT_VALUE) 
    { 
     $this->bar = $bar; 
    } 


    public function getPrefixedBar(string $prefix = self::DEFAULT_PREFIX) 
    { 
     return $prefix . $this->bar; 
    } 
} 

あなたが得る:

$a = new Foo; 
echo $a->getPrefixedBar(); // shows: '_lorem ipsum'; 
echo $a->getPrefixedBar('test '); // shows: 'test lorem ipsum'; 

$b = new Foo('xx'); 
echo $b->getPrefixedBar(); // shows: '_xx'; 
+2

これは受け入れ答えなければなりません – Akintunde007

関連する問題