PHP:检查子方法或直接调用方法

时间:2014-08-12 16:41:07

标签: php oop class-design

也许我的班级结构是错误的,所以希望我能得到一些建议。

我有一个名为'人物'的班级;这是一个抽象类。从它扩展了一个名为'savageworldsCharacter'的类。它们都包含一个名为save的方法; 'Character'保存方法通常保存内容,而'savageworldsCharacter'保存方法处理数据然后调用parent::save()

我现在有一个名为'hellfrostCharacter'的类,它来自'savageworldsCharacter'。它有一些不同的东西,但也有一个保存方法,其工作方式基本相同。不同之处在于,当我在hellfrostCharacter中调用save时,我不希望它在savageworldsCharacter::save中处理数据,而是直接跳到Character::save

有没有办法可以判断是否从实例化对象或子类调用了一个方法?我建错了吗?

1 个答案:

答案 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()方法调用。

这些只是一些基本的东西。如果没有进一步的背景,很难提供更具体的提示。