gpt4 book ai didi

php - 从父类调用子方法

转载 作者:可可西里 更新时间:2023-11-01 00:14:40 24 4
gpt4 key购买 nike

我有一个类被其他几个类用作扩展程序,在一个实例中,父类的方法需要回调子类的方法。有办法做到这一点吗?

我意识到 PHP 包含 abstract 类和函数,但需要每个子类都具有声明的 abstract 函数,在这种情况下我不需要.

例如(这些是例子,不是现实生活)-

Class parent{

function on_save_changes(){

some_parent_function();

if($_POST['condition'] === 'A') :
// Call 'child_1_action()'
elseif($_POST['condition'] === 'B') :
// Call 'child_2_action()'
endif

some_other_parent_function();

}

function some_parent_function(){
// Do something here, required by multiple child Classes
}

}

Class child_1 Extends parent{

function __construct(){
$this->on_save_changes();
}

function child_1_action(){
// Do something here, only every required by this child Class
}

}

Class child_2 Extends parent{

function __construct(){
$this->on_save_changes();
}

function child_2_action(){
// Do something here, only every required by this child Class
}

}

最佳答案

您可以通过简单地调用子方法来做到这一点,例如:

if($_POST['condition'] === 'A') :
$this->some_parent_function();
$this->child_1_action();

但是,您应该避免这样做。在父类中检查调用仅存在于子类中的方法是一种非常糟糕的设计味道。总有一种方法可以通过利用众所周知的设计模式或简单地更好地思考类层次结构来以更结构化的方式做事。

您可以考虑的一个非常简单的解决方案是在父类中将所有这些方法实现为空操作;每个子类都可以覆盖(并提供实现)它感兴趣的方法。这是一个有点机械的解决方案,所以没有办法知道它是否确实是您的情况下的最佳方法,但即使如此,它也比冷调用要好得多技术上不能保证存在的方法。

关于php - 从父类调用子方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17919474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com