2

好吧,我是 Stack Overflow 的新手,也是 PHP 的新手,我只是想了解 PHP 类。请记住,我习惯于 C++。

我正在尝试做的是创建一个 Matrix (2x2) 类,这似乎已经完成。

然后使用这个类创建2个矩阵,这似乎也完成了。

然后将这两个矩阵加在一起,比如 a = a + b。

这是我遇到问题的地方,我有一个函数可以传入我要添加的第二个矩阵,它返回的只是第一个矩阵的初始值。(调用函数的那个​​)这是我所拥有的简化版本:

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

与 C++ 相比,PHP 具有不同的语法。我会试着指出你在混合什么。我不会检查您的代码是否有效,因为我相信逻辑不是您遇到的问题。

首先,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 回答