0

何らかの理由で、これを機能させることができません。

<?php 
class Number{
    public $number;
    public $number_added;


    public function __construct(){
        $this->number_added = $this->add_two();
    }

    public function add_two(){
        return $this->number + 2;
    }
}   
?>

$this->numberはデータベースから設定され、$this->number_twoDB値+ 2である必要があります。ただし、エコーする$this->number_addedと、2が返されます。$number値は正しく初期化されました。これは、私が何をしようとしているのかを確認するための私の問題の単純化された例です。PHPOOP初心者。

4

1 に答える 1

3

(コンストラクターを介して)で$number使用する前にプロパティを設定していないため、PHPは追加中のようにプロパティを評価します。add_two()0

たとえば、オブジェクトの構築中に初期状態で渡す必要があります

public function __construct($number) {
    $this->number = $number;

    $this->number_added = $this->add_two();
}

アップデート

問題を説明させてください。これがあなたの現在のコードとあなたがそれを使っていると私が想像する方法です

$number = 2;

$obj = new Number();
// right here, $obj->number is null (0 in a numeric sense)
// as your constructor calls add_two(), $obj->number_added is 2 (0 + 2)

$obj->number = $number;
// now $obj->number is 2 whilst $obj->number_added remains 2

更新されたコンストラクターを使用すると、次のようになります

$number = 2;

$obj = new Number($number);
// $obj->number is set to $number (2) and a call to add_two() is made
// therefore $obj->number_added is 4
于 2013-02-05T00:12:34.577 に答える