【问题标题】:PHP - Access a function from another classPHP - 从另一个类访问函数
【发布时间】:2010-02-18 15:52:18
【问题描述】:

如何从函数 a 中访问 函数 b

这是我目前所拥有的,我收到了这个错误:PHP 致命错误:调用未定义的方法 a::b()

class test {
 function a($x) {
   switch($x)
   {
    case 'a'://Do something unrelated to class test2
      break;
    case 'b':
      $this->b();       
      break;
   }
 }
}

class test2 extends test {
 function b() {
  echo 'This is what I need to access';
 }
}

$example=new test();
$example2=new test2();
$example->a(b);

关于背景信息 - 函数 a 是通过 AJAX 发送的请求的开关。根据请求,它会调用一个函数来将记录添加到数据库、进行编辑等。

谢谢!

【问题讨论】:

  • 很难写出一个容易理解的答案,因为你经常重复使用你的名字。我必须区分类测试和对象测试,而且你有一个名为“b”的神秘参数传递给函数“a”,同时还有一个名为“b”的函数。为了清楚起见,您应该在示例中使用更具描述性和唯一性的名称。
  • 感谢您的快速解答。

标签: php oop function


【解决方案1】:

你必须在基类test中定义一个抽象方法b(这使得这个类抽象,所以你不能有它的实例)来调用这个方法,否则函数b没有在这个类中定义,只在它的基类一无所知的子类(也不应该知道任何东西)。

阅读继承。

另一件事:a 和 b 没有定义,使用引号。 (但这可能只是你的例子中的懒惰)

【讨论】:

  • 是的,我为示例省略了引号。感谢您的回答!
【解决方案2】:

你不能,$test 不是 test2 类的实例,所以它没有方法 b。如果你改为调用 $test2->a(b) ,它可以工作,只要你在类 test 中定义 b() 。这样,test2 类中 b 的定义就会覆盖它。

【讨论】:

    【解决方案3】:

    你不能这样做。

    【讨论】:

    • 所以唯一的方法就是调用 $test2->b(); ?
    • $test2 是一个“测试”并且可以访问方法 a() 和 b(); $test1 是一个 'test' 但不是一个 'test2' 所以只能访问方法 a()
    • 另外,$test1->a('b') 会失败
    【解决方案4】:

    如果你的函数可以在静态上下文中调用,你可以使用

    test2::b();
    

    否则你需要做一个

    test2Obj = new test2();
    test2Obj->b();
    

    以下包含一些适当的文档:http://us2.php.net/manual/en/language.oop5.paamayim-nekudotayim.php

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多