【问题标题】:What is the function __construct in PHP used for? [closed]PHP中的__construct函数是做什么用的? [关闭]
【发布时间】:2014-10-08 07:27:04
【问题描述】:

您能否给我一个包含函数 __construct 的示例,以及如果我们将其转换为过程 php,该代码会如何?也许这对你来说是一个愚蠢的问题,但对于我之前从未学习过 php oop 的我来说,当我遇到这个新功能时真的很困惑。

例如,在这段代码中,函数_construct用于实例化一个新类。

Class Car{

    private $brand;
    private $type;

    public function __construct($merk, $type){
        $this->brand= $brand;
        $this->type = $type;
    }

    public function getCar() {
        return "<strong>Brand:</strong> " . $this->merk . "<br /> <strong>Type:</strong> " . $this->type;
    }


}

但我发现了只包含此代码的新示例:

Class Game{
    public function __construct()
    {
    echo "Blah";
    }
}

为什么在最后一个例子中,函数 __construct 只包含单词 echo "Blah" 不包含此代码 --> $this->whatever word ?

【问题讨论】:

标签: php


【解决方案1】:

__construct 方法通常是在创建该类的实例(称为对象)时在 class 中调用的方法。该方法称为构造函数,因为它构造对象,但这并不意味着您必须使用该方法来这样做。

该方法的重点是将对象的变量设置为它们的初始值,它可能是一个原始类型,如整数,也可能是另一个类的实例。如果变量不是默认值,__construct 方法可以接受参数来设置变量的值。

您不必使用构造方法设置变量,也不是您唯一可以做的事情。例如,您可以在该类或其他地方打印成功消息或调用另一个方法。所以你的两个例子都是有效的。第一个是您期望使用构造函数的方式,但第二个仍然有效。就像我说的,__construct在创建对象时调用的方法,这并不意味着您必须将它用于预期目的。

在 PHP 中,类中不需要有构造函数方法,但是在许多其他面向对象的编程语言中,例如 Java,如果构造函数不存在,那么它会在编译时产生错误。这是因为 PHP 是一种众所周知的弱类型语言,它有许多优点和缺点,您可以进一步研究。

因为__construct是PHP类中专门使用的magic methods之一,所以不能转换成程序代码。要使用参数调用方法,当您在代码中分配一个类时,您应该在创建语句中提供参数,如下所示;

$object = new MyClass($arg1,$arg2);

除了创建新对象时,您不能从类外部调用构造函数。唯一的例外是子类(即扩展另一个类的类)可以使用parent::__construct(); 调用其父类的构造函数。

【讨论】:

    【解决方案2】:

    构造函数用于实例化一个新的类(虽然不是必须的),如下例所示:

    <?php
    Class Car{
    
        private $brand;
        private $type;
    
        public function __construct($brand, $type){
            $this->brand= $brand;
            $this->type = $type;
        }
    
        public function getCar() {
            return "<strong>Brand:</strong> " . $this->merk . "<br /> <strong>Type:</strong> " . $this->type;
        }
    
    
    }
    
    
    $car= new Car('Audi', 'A3');
    echo $car->getCar(); 
    /* Will return:
     Brand: Audi
     Type: A3
    */
    

    【讨论】:

      猜你喜欢
      • 2010-10-02
      • 1970-01-01
      • 2017-12-08
      • 1970-01-01
      • 2011-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-07
      相关资源
      最近更新 更多