【问题标题】:Extended classes and undefined Variables - PHP [duplicate]扩展类和未定义的变量 - PHP [重复]
【发布时间】:2018-09-02 21:58:24
【问题描述】:

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();

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

【问题讨论】:

    标签: php


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2022-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多