【问题标题】:Can I declare an object as a data member in a class in PHP?我可以在 PHP 中将对象声明为类中的数据成员吗?
【发布时间】:2021-04-19 14:04:39
【问题描述】:

所以我得到了一个抽象类 Bee:

    abstract class Bee{
  private $name;
  private $number;
  private $health;

  public function __construct() {
  }
  /**
   * Functii set/get.
   */
  public function getName() { return $this->name; }
  public function setName($value) { $this->name = $value; }

  public function getNumber() { return $this->number; }
  public function setNumber($value) { $this->number = $value; }

  public function getHealth() { return $this->health; }
  public function setHealth($value) { $this->health = $value; }

  abstract public function hitted(); ///
}

另外 3 个类(Queen、Worker 和 Drone)扩展了 Bee 类

/

**
 * Queen.
 */
class Queen extends Bee
{

  public function __construct() ///initializarea valorile Queen.
  {
    $this->setName("Queen");
    $this->setHealth(100);
      $this->setNumber(1);
  }


  public function hitted() /// Evenimentele declansate de primirea atacurilor.
  {
        $this->setHealth($this->getHealth() - 8);

  }
}

/**
 * Worker.
 */
class Worker extends Bee
{

  public function __construct() ///initializarea valorile Worker.
  {
    $this->setName("Worker");
    $this->setHealth(75);
      $this->setNumber(5);
  }


  public function hitted() /// Evenimentele declansate de primirea atacurilor.
  {
        $this->setHealth($this->getHealth() - 10);

  }
}

/**
 * Drone.
 */
class Drone extends Bee
{

  public function __construct() ///initializarea valorile Drone.
  {
    $this->setName("Drone");
    $this->setHealth(50);
      $this->setNumber(8);
  }


  public function hitted() /// Evenimentele declansate de primirea atacurilor.
  {
        $this->setHealth($this->getHealth() - 12);

  }
}

当我使用以下数据成员声明 Class Swamp 时出现错误:

class Swarm{

    public $arr = array();
    public $queen = new Queen();
    public $worker = new Worker();
    public $drone = new Drone();

  public function __construct() {
    
  }


}

这是我的错误:

致命错误:常量表达式在 C:\xampp\htdocs\The Bee Game\background.php 在第 93 行

第 93 行在 Swamp 类中:

public $queen = new Queen(); 

【问题讨论】:

  • 将 $queen 留空 (public $queen;) 并在构造函数中对其进行初始化 ($this->queen = new Queen();)?
  • @DefinitelynotRafal - 将其作为答案发布,以便 OP 可以接受它并向其他人展示问题已解决。并为您获得应有的声誉。
  • 它甚至不需要属性'this'
  • @GeorgeBusu - 如果从$this->queen = new Queen(); 中省略$this,它将不会存储在类属性中,而是作为仅在构造函数内部可用的局部变量。 $this 不是属性,它是对当前对象的引用。你可以阅读更多关于class properties here和variable scopes here的信息
  • 哦……要学的东西太多了。非常感谢! :)

标签: php class object


【解决方案1】:

只需在构造函数中进行初始化

class Swarm {
    public $arr = array();
    public $queen;
    public $worker;
    public $drone;

    public function __construct() {
        $this->queen = new Queen();
        $this->worker = new Worker();
        $this->drone = new Drone();
    }
}

【讨论】:

    猜你喜欢
    • 2013-09-20
    • 2014-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-22
    • 1970-01-01
    相关资源
    最近更新 更多