Расширение методов класса в PHP


Я создаю пользовательскую 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()?

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

Author: Rolando Cruz, 2011-09-09

1 answers

Вы можете использовать родителя , чтобы получить высший класс. Даже если в следующем примере вы вызываете его с помощью 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();
?>
 6
Author: TJHeuvel, 2011-09-09 09:39:28