【问题标题】:Extend class methods in PHP在 PHP 中扩展类方法
【发布时间】:2011-11-13 15:32:43
【问题描述】:

我正在做一个自定义 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() 中使用它吗?

或者有没有扩展方法的方法?

【问题讨论】:

  • Content::save 在您的示例中未声明为静态。您确定您发布的所有内容都正确吗?
  • PHP 支持调用静态的东西,尽管它没有被定义为静态的。只要你不使用$this,一切都很好。
  • 顺便说一句,您的实际问题是什么? Image 应该调用 Content 的 save 吗?
  • @JOHN,之前发布的函数是我想要的样子,这就是为什么我在Image::save() 插入评论:如果我将 Contents::save() 声明为静态
  • @TJHeuvel:很抱歉,如果我不能清楚地表达我想做什么,是的,我希望Image::save() 调用Content::save(),但我希望两者都被称为save()。我希望两者都成为public 而不是static,因为我需要$this。这可能吗?

标签: php object methods extend


【解决方案1】:

您可以使用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对接受答案有这个时间限制?
猜你喜欢
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-03
  • 1970-01-01
相关资源
最近更新 更多