在PHP中扩展类方法

7

我正在开发一个自定义 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()中使用它吗?
还是有一种方法可以扩展方法?

2
您的示例中,Content::save未声明为静态。您确定已经发布了所有正确的内容吗? - J0HN
你的实际问题是什么?Image 应该调用 Content 的 save 吗? - TJHeuvel
@JOHN,之前发布的函数就是我想要的样子,这就是为什么我在Image::save()处插入了一个注释:_如果我将Contents::save()声明为静态的_。 - Rolando Cruz
@TJHeuvel:如果我不能很好地表达我的意图,我很抱歉。是的,我希望Image::save()调用Content::save(),但我希望两者都被称为save()。我希望它们都是public而不是static,因为我需要$this。这可能吗? - Rolando Cruz
@OZ_:原始帖子中有一个公共方法。由于JOHN的评论而被编辑。 - Rolando Cruz
显示剩余5条评论
1个回答

9
你可以使用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();
?>

看起来很合适。谢谢!等待1分钟以接受。为什么stackoverflow要对接受答案设置时间限制呢? - Rolando Cruz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接