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();
我在侧面,长度和宽度上得到未定义的变量错误。 这三个变量不具有默认值,也是由构造函数设置的。
答案 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();