所以我有这个层次结构: -
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>?
答案 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();
}
}
希望它会有所帮助。