在其他子类别(同一个父母)中使用“父母子女”方法

时间:2018-12-18 11:23:12

标签: php class oop

我对OOP有一些问题。我刚刚在php中开始OOP,但遇到了一些问题。 所以我有一个问题想问您,也许您会帮我的忙。

我有多个班级(在本例中为3个)

        <?php
            //FILE class.NB.php
            class NB { //databse manipulations, curls
                public $db;
                function __construct($db) {
                    $this->db = $db;
                }

                public function LoginNB () {
                    //something here
                    $this->db->query("UPDATE logins SET login_time = %u", time());
                }
            }

            //FILE class.fn.php
            class FN extends NB {
                public function deposits () {
                    $this->LoginNB();
                    return $this->db->query("SELECT * FROM deposits");
                }


                public function getUserWihdrawsCompared() {
                    // AND HERE I WOULD LIKE TO USE the DR's ::usersWithdraws
                    $users = $this->usersWithdraws();
                }
            }


            //FILE class.dr.php
            class DR extends NB {
                public function withdraws () {
                    $this->LoginNB();
                    return $this->db->query("SELECT * FROM withdraws");
                }

                public function usersWithdraws() {
                    $a = $this->db->query("SELECT * FROM user_withdraws");
                    /*code here*/
                    return $final_array;
                }

                public function compare_withdraws_deposits () {
                    // AND HERE I WOULD LIKE TO USE the FN's ::deposits
                    $deposit_list = $this->deposits();

                    /* code here */

                    return $final_array;
                }
            }

        ?>

所以我的问题是,如何在所有地方都可以使用所有东西。 我看到了一些带有特征的东西,但是我不确定如何使用以及确切使用什么。 我的问题是我想在具有相同父级的其他子级中使用父级的子级方法。 但是最后,如果可能的话,我只想使用父类在其他类中“运行”实现。 喜欢:

    $NB = new NB($db);
    $result = $NB->ShowResults();

问题:ShowResults()应该同时使用子方法和ShowResults()中使用的子方法,有时还要使用其他子类中的方法。

也许这是不可能的,但如果您能帮助我,我将不胜感激。 (即使无法确认)

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为您尚未完全理解OOP中“父母”和“孩子”的含义以及它们为什么有用。继承的目的不是授予对另一类中一个类的方法的访问权限,也不是自动运行同一事物的多个实现。相反,其目的是允许代码外部这些类调用实现的一个而不需要知道哪个

因此,如果我有一个类gpg2的实例,我知道可以在其上调用NB。如果我通过的实际上是类LoginNB的实例,则仍然可以使用;类FN要么继承该方法,要么以其他方式重新实现,但具有相同的外部签名。

但是,类FN对于从其继承什么类一无所知,而不仅仅是函数知道从何处调用它。这种关系只有一种方式。