继承的变量不起作用

时间:2014-02-25 21:11:33

标签: php

我可能有一个非常简单的问题,但我现在不知道如何修复它。也许我只是忘记了什么,但我需要你的帮助。

我有模特:

    <?php

class Model
{
  protected $storage;
  public function __construct()
  {
    $this->storage = $_SERVER["DOCUMENT_ROOT"] . "/mvc/images/";
    if(!file_exists($this->storage))
    {
      mkdir($this->storage, 0777);
    }
  }
  public function storageHandler()
  {   
    if(count(glob($this->storage."/*")) === 0)
      {
      echo "Žiadne kategórie";
      }
    else
    {  
      $iterator = new DirectoryIterator($this->storage);
      return $iterator;
    }
  }

}

?>

模型类别,继承自Model。

    <?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/mvc/model/Model.php");
  class Category extends Model
  {
  private $photos_count;
   public function __construct($data)
    {
        if(isset($data))
        {
          $gallery_path = $this->storage . $data;
          if(!file_exists($this->$storage .$data))
          {
          mkdir($tihs->storage . $data, 0700);
          header("Location: /mvc/" );
          }
          else
          {
          echo "Kategória už existuje.";
          }
        }
    }


  }

?>

我很想在我的Category类中使用Model中的$ storage变量。我该怎么办?我知道某种方式,但它不会是最好的。有没有解决方案可以做到这一点?

2 个答案:

答案 0 :(得分:2)

受保护的属性$ storage可供您的子课程使用,但您的例子中$this拼写错误:

   mkdir($tihs->storage . $data, 0700);

应该是:

  $this->storage ...

另外,正如mamdouh所说,你需要从子进程中调用父构造函数来初始化:

public function __construct($data)
{
    parent::_construct();
     ...rest of code...

答案 1 :(得分:2)

除了Ray的回答,您需要在类别类中使用parent::__construct(),如此

class Category extends Model
  {
  private $photos_count;
   public function __construct($data)
    {
        parent::__construct();
        //rest of the code