实例化的子类可以访问父类设置的属性吗?

时间:2017-07-19 16:51:20

标签: php

我是面向对象PHP的新手,并且仍然围绕着类和子类。

在这个简单的例子中,$this->siteName在实例化的类Two中是空的(从类One的方法“build”调用)。

第二类的实例有没有办法继承父级设置的属性值?

我知道我可以把第二类变成第一类的方法,但我喜欢有单独的组织文件。

有更好的方法吗?

文件一

class One {

  protected $siteName;

  function __construct() {
    $this->siteName = 'Example';
  }

  public function build() {
    $two = new Two();
    return $two->build();
  }

}

文件二

class Two extends One {

  public function build() {
    return "<h1>$this->siteName</h1>";
  }

}

2 个答案:

答案 0 :(得分:0)

听到它的声音,你试图解决错误的问题。

我对您的问题的理解是,出于组织原因,您基本上希望将public function build()的代码放在另一个文件中。

以下是:

class One {
    private $siteName;
    public function __construct() {
        $this->siteName = 'Example';
    }

    use One_build;
}

假设您有正确的自动加载设置,或者已正确包含文件,您可以拥有单独的文件:

trait One_build {
    public function build() {
        return "<h1>".$this->siteName."</h1>";
    }
}

这允许源代码的水平传播。

答案 1 :(得分:0)

您的代码可以进行一些调整。你需要将你的字符串的h1标签与你的变量连接起来,引号不能围绕整个事物。

除此之外,只需创建一个类的实例并尝试它。

class One {

  protected $siteName;

  function __construct() {
    $this->siteName = 'Example';
  }

  public function build() {
    $two = new Two();
    return $two->build();
  }

}

class Two extends One {

  public function build() {
    return "<h1>".$this->siteName."</h1>";
  }

}

$taco = new Two();
echo $taco->build();

这将返回<h1>Example</h1>