【问题标题】:How to call constructor in php?如何在php中调用构造函数?
【发布时间】:2017-05-15 02:36:46
【问题描述】:

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

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

【问题讨论】:

  • 你在说什么语言?
  • 无论您使用哪种语言,请按照教程进行操作。
  • 谢谢。我在问面向对象编程。
  • 您仍然没有指定语言。
  • 您不能从方法执行构造函数(尤其是超过 1 个)(我希望您不是指实例方法)。如果您在谈论静态方法,那么调用两个构造函数将转换为实例化 2 个对象。

标签: oop


【解决方案1】:

在 C++ 中:

你可以通过创建一个子对象来调用。

当您创建一个子对象时,它首先调用父构造函数,然后调用子构造函数。

例子:

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);
    }
}

【讨论】:

  • 谢谢。我问的是 OOP。
  • @ShamimaRashidSumi 是的,哪种语言有 OOP?
  • @ShamimaRashidSumi C++ 是 C 语言的面向对象版本。上面的示例使用了构造函数 Overriding,它是 OOP 的主体。
  • @ShamimaRashidSumi OOp 只是一种编程语言模型,它可以展示我的多种语言,如 Java、C++、Python ..您具体要求哪种语言?
  • 我说的是php。
【解决方案2】:

我是根据 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;
    }
.
.
.

希望这会有所帮助。

【讨论】:

    【解决方案3】:

    在 C# 中; 当你创建一个子类的实例时,如果基类有一个无参数的构造函数,它就会被调用。但是如果基类有参数构造函数,你可以按照下面的语法调用它的构造函数。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-12
      • 2011-03-06
      • 2023-03-15
      • 2016-08-29
      • 2023-03-21
      • 2010-12-15
      • 1970-01-01
      • 2016-07-16
      相关资源
      最近更新 更多