扩展类和未定义的变量 - PHP

时间:2018-03-24 09:02:15

标签: php

Square和Rectangle是扩展抽象类ShapesClass的类,用于定义自己的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();

我在侧面,长度和宽度上得到未定义的变量错误。 这三个变量不具有默认值,也是由构造函数设置的。

2 个答案:

答案 0 :(得分:5)

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

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

基本上$foo的作用类似于本地,变量,作用于当前方法。 $this->foo就像一个实例变量,可以在类中的任何地方使用。

答案 1 :(得分:1)

在我们为任何类创建变量的代码中,我们可以在仅使用类引用的方法内调用它们,即$ 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();