扩展类和未定义变量-PHP

扩展类和未定义变量-PHP,php,Php,Square和Rectangle是扩展抽象类ShapeClass的类,它们定义自己的Area方法 abstract class ShapesClass { // Force Extending class to define this method abstract public function Area(); } class Square extends ShapesClass { private $side = 0;

Square和Rectangle是扩展抽象类ShapeClass的类,它们定义自己的Area方法

    abstract class ShapesClass
    {
        // Force Extending class to define this method
        abstract public function Area();
    }

class Square extends ShapesClass
{
    private $side = 0;

    function __construct($n)
    {       
        $side = $n;     
    }

    function Area()
    {
        echo $side * $side;
    }
}

class Rectangle extends ShapesClass
{
    var $length = 0;
    var $width = 0;

    function __construct($a,$b)
    {
        $length = $a;
        $width = $b;
    }

    function Area()
    {
        echo $length * $width;
    }
}

$listShapes = array();
$listShapes[0] = new Square(3);
$listShapes[1] = new Rectangle(3,4);

$listShapes[0]->Area();
$listShapes[1]->Area();
我在侧面、长度和宽度上得到了未定义的变量错误。
这三个变量不是都有默认值,而且也是由构造函数设置的。

您实际上想将它们称为
$this->foo

function __construct($a,$b)
{
    $this->length = $a;
    $this->width = $b;
}

基本上,
$foo
就像一个局部变量,作用域为当前方法<代码>$this->foo的作用类似于实例变量,它在类中的任何位置都可用。

在您的代码中,每当我们为任何类创建变量时,我们都可以仅在类引用的方法内部调用它们,即$this

此外,在php中,我们可以使用var定义变量,有public、protected和private关键字来定义任何变量

因此,您可以使用以下代码更新您的代码

abstract class ShapesClass
{
    // Force Extending class to define this method
    abstract public function Area();
}

class Square extends ShapesClass

{
    private $side = 0;

    function __construct($n)
    {       
        $this->side = $n;     
    }

    function Area()
    {
    echo $this->side * $this->side;
    }
}

class Rectangle extends ShapesClass {
    private $length = 0;
    private $width = 0;

    function __construct($a,$b)
    {
        $this->length = $a;
        $this->width = $b;
    }

     function Area()
     {
         echo $this->length * $this->width;
     }
}

$listShapes = array();
$listShapes[0] = new Square(3);
$listShapes[1] = new Rectangle(3,4);

$listShapes[0]->Area();
$listShapes[1]->Area();