也许我的班级结构是错误的,所以希望我能得到一些建议。
我有一个名为'人物'的班级;这是一个抽象类。从它扩展了一个名为'savageworldsCharacter'的类。它们都包含一个名为save的方法; 'Character'保存方法通常保存内容,而'savageworldsCharacter'保存方法处理数据然后调用parent::save()
。
我现在有一个名为'hellfrostCharacter'的类,它来自'savageworldsCharacter'。它有一些不同的东西,但也有一个保存方法,其工作方式基本相同。不同之处在于,当我在hellfrostCharacter中调用save时,我不希望它在savageworldsCharacter::save
中处理数据,而是直接跳到Character::save
。
有没有办法可以判断是否从实例化对象或子类调用了一个方法?我建错了吗?
答案 0 :(得分:0)
无论您的设计是好还是坏,都可以通过将get_class()
与get_called_class()
进行比较来实现:
<?php
class Character {
public function save() {
if(get_class() == get_called_class()) {
echo "called directly";
} else {
echo "called from child class";
}
}
}
class savageworldsCharacter extends Character {
}
$character1 = new Character();
$character2 = new savageworldsCharacter();
$character1->save(); //outputs "called directly"
$character2->save(); //outputs "called from child class"
?>
然而,正如所说,这仅仅是技术角度。如果方法的行为因所调用的子类而异,那么也许最好也在子类中编写一个单独的方法。如果你有一些相似之处,你可以在父类中创建辅助方法,由子save()方法和父save()方法调用。
这些只是一些基本的东西。如果没有进一步的背景,很难提供更具体的提示。