如何在php中调用构造函数?

时间:2016-12-30 20:22:03

标签: oop

如果我创建一个类并定义它的公共构造函数,我也创建了父类的子类,它也有构造函数。

那我怎么能从子类的一个方法中调用这两个构造函数呢?我的意思是如何从php中的子类的一个方法调用两个或更多构造函数?

3 个答案:

答案 0 :(得分:0)

在C ++中:

您只需创建子对象即可调用。

当你刚创建一个子对象时,它首先调用Parent Constructor,然后调用子构造函数。

示例:

Class Parent {
    void Parent :: Parent() {
        cout << "I am parent Constructor!" << endl;
    }
};
Class Child : Public Parent() {
    void Child :: Child() {
        cout << "I am Child Constructor" << endl;
    }
};
int main() {
    Child childobj;
}

输出:

"I am parent Constructor!"
"I am Child Constructor"

对于PHP

class Parent {
    public function __construct($bypass = false) {
        // Only perform actions inside if not bypassing.
        if (!$bypass) {

        }
    }
}
class Child extends Parent {
    public function __construct() {
        $bypassPapa = true;
        parent::__construct($bypassPapa);
    }
}

答案 1 :(得分:-1)

在C#中; 当您创建子类的实例时,如果基类具有无参数构造函数,则将调用它。但是如果基类有参数构造函数,你可以通过遵循语法来调用它的构造函数。

Class SubClass : BaseClass(...)
{
   ...
}

为了在其他方法中调用构造函数,您需要有一个由构造函数调用的protected方法,然后您可以从另一个方法调用它。请注意,您不能从另一个方法调用构造函数,因为它是一种实例化的机制(它应该在创建该类型的实例时调用)

答案 2 :(得分:-1)

我正在回答这个问题,特别是基于C ++编程,因为我不确定您使用的是哪种OOP语言,但我希望原则(如果不是具体的语法)将适用。

当您定义具有至少一个构造函数的类时,编译器将不会生成隐式构造函数。因此,如果为基类定义的构造函数需要参数,则它们必须包含在子类中构造函数的特定调用中,因为不会有任何无参数构造函数要调用。

class Parent
    {
    public:
    Parent(int a,int a)
        :a(a),
        b(b)
    {
        cout<<"Parent constructor "<<a<<b;
    }
    ~Parent()
    {}
private:
    int a;
    int b;
};

class Child : public Parent
{
public:
    Child()
        :c(5) //error: implicit constructor for Parent is not found
    {
        cout<<"Child constructor "<<c;
    }
    ~Child()
    {}
private:
    int c;
};

int main()
{
    Child x;
    return 0;
}

可以通过在Child类的构造函数中包含对Parent构造函数的调用来纠正此问题,如下所示:

.
.
.
Child()
    :Parent(3,4),  // Explicit call to Parent constructor
    c(5)
    {
        cout<<"Child constructor "<<c;
    }
.
.
.

希望这有帮助。