0
class config {
    public $pageName;

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


class header extends config {
    function display(){
        echo parent::$this->pageName;
    }

}


$config = new config('Home Page');
$header = new header();
$header->display();

これは何も表示されません。「ホームページ」が表示されるべきだと思いました。

どうすればこれを達成できますか?

4

4 に答える 4

4

オブジェクトは$headerオブジェクトと関係がありません$config。クラス階層が接続されているからといって、オブジェクト インスタンスがデータを共有しているとは限りません。

$config1 = new config('Home Page');
$config2 = new config();

別のオブジェクトであるため、ここ$config2でも値にアクセスできませんでした。'Home Page'クラス階層の問題ではありません。

于 2012-04-04T08:37:15.720 に答える
1

クラスを継承する代わりにオブジェクトを作成したい(制御の反転、依存性注入):

interface IConfig {
  public function pageName();
}
class Config implements IConfig {
    private $pageName;
    public function pageName() { return $this->pageName; }

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


class Header {
    private $config;

    function __construct(IConfig $config) {
      $this->config = $config;
    }

    function display(){
        echo $this->config->pageName();
    }

}


$config = new Config('Home Page');
$header = new Header($config);
$header->display();
于 2012-04-04T08:39:48.113 に答える
1
$header = new header('Home Page');
$header->display();
于 2012-04-04T08:40:01.330 に答える
0
$header = new header('Home Page');
$header->display();
于 2012-04-04T08:43:03.243 に答える