2

わかりました、私はスタック オーバーフローが初めてで、PHP が初めてで、PHP クラスについて理解を深めようとしています。私はC++に慣れていることを覚えておいてください。

私がやろうとしているのは、Matrix (2x2) クラスを作成することです。

次に、このクラスを使用して 2 つのマトリックスを作成します。これも行われているようです。

次に、これらの 2 つの行列を足し合わせて、a = a + b とします。

これは私が問題を抱えている場所です。追加したい2番目のマトリックスに渡す関数があり、返されるのは最初のマトリックスの初期値だけです。(関数を呼び出すもの)これは私が持っているものの簡略化されたバージョンです:

class Matrix2
{
        private $m_m1;
        private $m_m2;
        private $m_m3;
        private $m_m4;

        function __construct($a_m1 = 1, $a_m2 = 1, $a_m3 = 1, $a_m4 = 1)
        {
            $this->m_m1 = $a_m1;
            $this->m_m2 = $a_m2;
            $this->m_m3 = $a_m3;
            $this->m_m4 = $a_m4;
        }

        public function AddMatrix(Matrix2& $Matrix)
        {
            $m_m1 + $Matrix2.$m_m1;
            $m_m2 + $Matrix2.$m_m2;
            $m_m3 + $Matrix2.$m_m3;
            $m_m4 + $Matrix2.$m_m4;        

            return $this;
        }
}

そして、私がそれを呼んでいるとき:

$MatrixA = new Matrix2();
$MatrixB = new Matrix2(2, 2, 2, 2);
var_dump($MatrixA->AddMatrix($MatrixB));

私はC ++でこれを達成する方法を知っています、私は何度もやったことがありますが、PHPの新しい構文などは私を混乱させます..どんな助けも大歓迎です:)

4

1 に答える 1

2

PHP の構文は、C++ とは異なります。あなたが混ぜているものを指摘しようとします。ロジックは問題ではないと私は信じているので、コードが機能するかどうかはチェックしません。

まず第一に、PHP にはスコープを操作するさまざまな方法があります。関数 AddMatrix 内で、関数スコープを持つ変数の値を設定しています。クラス変数に値を設定するとします。したがって、現在のオブジェクトを参照する必要があります。

public function AddMatrix(Matrix2& $Matrix)
        {
            $this->m_m1 + $Matrix2.$m_m1;
            $this->m_m2 + $Matrix2.$m_m2;
            $this->m_m3 + $Matrix2.$m_m3;
            $this->m_m4 + $Matrix2.$m_m4;        

            return $this;
        } 

「.」の代わりにクラス属性にアクセスするために演算子 -> を使用していることに注意してください。それはあなたのコードの別の問題です。オペレーター "。" 文字列を連結するために使用されます。クラス属性または関数にアクセスするには、-> を使用します。したがって、その後の関数がどのようになるかを確認してください。

public function AddMatrix(Matrix2& $Matrix)
        {
            $this->m_m1 + $Matrix2->m_m1;
            $this->m_m2 + $Matrix2->m_m2;
            $this->m_m3 + $Matrix2->m_m3;
            $this->m_m4 + $Matrix2->m_m4;        

            return $this;
        } 

はい、使用後に $ 文字を取り除きます ->。正解です。変数には $ のみを使用します。オブジェクト属性にアクセスするときは決してしないでください。

別の間違い... PHP は変数にデータ型を使用しません。オブジェクトはすでに参照です。したがって、& 演算子は不要です。それでは、関数を完成させましょう。

public function AddMatrix($Matrix2)
        {
            $this->m_m1 + $Matrix2->m_m1;
            $this->m_m2 + $Matrix2->m_m2;
            $this->m_m3 + $Matrix2->m_m3;
            $this->m_m4 + $Matrix2->m_m4;        

            return $this;
        } 
于 2013-05-10T00:59:03.910 に答える