Расширить методы класса в PHP - PullRequest
6 голосов
/ 09 сентября 2011

Я создаю собственную CMS и создал свой базовый класс контента следующим образом:

class Content
{
  public $title;
  public $description;
  public $id;

  static function save()
  {
    $q = "[INSERT THE DATA TO BASE CONTENT TABLE]";
  }
}

class Image extends Content
{
  public $location;
  public $thumbnail;

  public function save()
  {
     // I wanted to do a Content::save() here if I 
     //  declare Contents::save() as static
     $q = "[INSERT THE DATA TO THE IMAGE TABLE]";
  }
}

Моя проблема в том, что я знаю, что статическая функция не может использовать $this, но я знаю, что Content::save() должен использовать ее.

Я хочу, чтобы Image::save() позвонил Content::save(), но я хотел, чтобы они оба были названы save() и были объявлены public, а не static, потому что мне нужно $this.

Будет ли единственным решением переименовать Content::save(), чтобы я мог использовать его в Image::save()?

Или есть способ расширения методов?

1 Ответ

6 голосов
/ 09 сентября 2011

Вы можете использовать parent , чтобы получить высший класс.Даже если в следующем примере вы вызываете его с помощью parent::Save, вы все равно можете использовать $this в родительском классе.

<?php

class A
{
    public function Save()
    {
        echo "A save";
    }
}


class B
    extends A
{
    public function Save()
    {
        echo "B save";
        parent::Save();
    }
}
$b = new B();
$b->Save();
?>
...