【问题标题】:PHP: How can I access a children class function from parent class variable?PHP:如何从父类变量访问子类函数?
【发布时间】:2013-12-12 17:53:41
【问题描述】:

我正在尝试做某事,但显然我似乎遗漏了一些东西。抱歉,我是新手。

class PARENT_API {
    function __construct() {

    }
}
$api = new PARENT_API();

class common extends PARENT_API {
    function foo(){
        return 'Test!';
    }
}

为什么我不能这样做?

echo $api->common->foo();

我只是想将大型代码组织到类中,我不能这样做吗,我缺少什么?

【问题讨论】:

  • 如果父项需要访问子函数,则您做错了 OOP。 en.wikipedia.org/wiki/Liskov_substitution_principle
  • 我看到插件这样做了。 $parent->childclass->function() 或变量。我忽略了什么吗?
  • 这不是您在 php(或我知道的任何其他语言)中执行 OOP 的方式。请阅读php.net/manual/en/language.oop5.inheritance.php
  • childclass 是一个名为 childclass 的属性。它实际上不是一个孩子。 PARENT_API 不应以任何方式了解或依赖 common
  • 对不起,我弄错了 =( 所以没有办法避免调用子类来获取 foo()?

标签: php class oop


【解决方案1】:

我认为您混淆了依赖项和可扩展性...

依赖关系:父对象可能需要一个子对象来为它执行一些隐蔽的操作。它还允许您轻松切换子对象并更改父对象的操作方式。

可扩展性:子类可以继承自父类。可以说 BClass 也是 AClass 并且可以做完全相同的事情,但略有不同。只有 BClass 可以评估 AClass,因为 BClass 也是 AClass,但反过来就不行!

这是你的意思吗?

【讨论】:

    【解决方案2】:

    你需要像这样访问foo()方法

    $api_1 = new common();
    $api_1->foo();
    

    我看到插件这样做了。 $parent->childclass->function() 或变量。 我是否忽略了什么?

    我真的很怀疑。我不认为 Parent 可以继承 Child。

    【讨论】:

      【解决方案3】:

      首先,你的子类函数是这样的:

      class common extends PARENT_API {
          function foo(){
              echo 'Test!';
          }
      }
      

      但是你这样称呼它:

      echo $api->common->foo();
      

      两个echo?将类函数更改为此返回输出:

      class common extends PARENT_API {
          function foo(){
              return 'Test!';
          }
      }
      

      另外,它应该被称为:

      $api_common = new common();
      echo $api_common->foo();
      

      编辑当您执行class common extends PARENT_API 时,您正在创建一个新的common 类。所以你不能打电话给PARENT_API,然后期望它被神奇地扩展。您需要致电common

      【讨论】:

      • 所以如果不调用子类 new Child() 就没有办法获取 foo() 吗?
      • 没有。看看我编辑的答案。你不能做你所描述的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 2011-09-21
      • 2016-03-16
      • 2018-08-15
      相关资源
      最近更新 更多