从父类调用子类的函数

时间:2017-09-29 07:46:44

标签: php oop

所以我有这个层次结构: -

class base{

    function something(){
    }

    function something2(){
    }
}

class api extends base{

   function send(){
   //how do I call the function "send" from "message" class 
     within this current function (Send function of api class)
   }
}


class message extends api{
    function send(){
    //do something
    }
}

如何在类 api <的函数 send()中调用类消息的函数 send() / strong>?

2 个答案:

答案 0 :(得分:1)

如果要在消息调用中调用send的父实例,可以执行以下操作。

<?php

class message extends api{
    function send(){
        return parent::send() //This will call the send() method in api
    }
}

但是,如果您只是继承相同的功能,则不需要上述功能,因此可以执行以下操作。

<?php

class message extends api{
    //notice no send method
}

$message = new message();
$message->send(); //Still calling the send() method in api

我强烈建议您遵循命名惯例并将类名格式化为 StudlyCaps 。有关详细信息,请访问:http://www.php-fig.org/psr/psr-1/

重新阅读时,您似乎在寻找类抽象。 基本上是父母的一种方式来了解&#39;它的子类实现了什么。 可以定义以下架构。

<?php

//Notice 'abstract' added before the class
abstract class api extends base{

   /**
    * Defining this abstract method basically ensures/enforces
    * that all extending classes must implement it.
    * It is defined in the 'parent', therefore the parent knows it exists.
    */
   abstract protected function doSend();

   function send(){
       //This calls the 'child' method
       //This could be defined within the message class or any other extending class
       return $this->doSend();
   }
}

/**
 * Becuase we extend the new abstract class, we must implement its abstract method
 */
class message extends api{
    protected function doSend(){
        //Do something here
    }
}

然后可以完成以下任务。

<?php
$message = new message();
$message->send(); //Calls the api send() method, which then calls the message doSend() method.

答案 1 :(得分:0)

所以你可以将完整的消息对象发送到api类,然后你可以从Api类函数中的Message Class中获取你的send方法。

喜欢

$message_object = new message();
$api_object = new api();
$api_object->send($message_object);

现在您的api发送消息将如下所示

class api extends base{
   function send(message $message){
     // You can access "send" function of "messag"e class like in below.
     $send = $message->send(); 
   }
}

希望它会有所帮助。