【问题标题】:Benefits of using a constructor?使用构造函数的好处?
【发布时间】:2010-09-29 01:26:03
【问题描述】:

在我尝试更多地了解 PHP 中的 OOP 的过程中。我已经多次遇到构造函数,根本无法再忽略它。在我的理解中,构造函数是在我创建对象的那一刻被调用的,这是正确的吗?

但是,如果我可以使用“普通”函数或方法作为它们的调用,我为什么需要创建这个构造函数?

干杯, 基思

【问题讨论】:

  • 另外,请参阅stackoverflow.com/questions/403756/…,它提出了同样的问题
  • 哈哈,太搞笑了。这是我完全忘记的问题。问我的问题时,我正在查看相关问题,但什么也没看到。抱歉,由于答案太多,我无法删除此问题。
  • 还剩 2 年,没有任何变化 )))

标签: php oop constructor


【解决方案1】:

构造函数允许您确保在尝试使用对象之前将其置于特定状态。例如,如果您的对象具有使用它所需的某些属性,您可以在构造函数中初始化它们。此外,构造函数允许一种有效的方式来初始化对象。

【讨论】:

    【解决方案2】:

    是的,在创建对象时会调用构造函数。

    构造函数有用的一个小例子是this

    class Bar
    {
        // The variable we will be using within our class
        var $val;
    
        // This function is called when someone does $foo = new Bar();
        // But this constructor has also an $var within its definition,
        // So you have to do $foo = new Bar("some data")
        function __construct($var)
        {
            // Assign's the $var from the constructor to the $val variable 
            // we defined above
            $this->val = $var
        }
    }
    
    $foo = new Bar("baz");
    
    echo $foo->val // baz
    
    // You can also do this to see everything defined within the class
    print_r($foo);
    

    更新: 一个问题还问为什么应该使用它,一个真实的例子是一个数据库类,你用用户名和密码调用对象以及要连接的表,构造函数将连接到该对象。然后您就拥有了在该数据库中完成所有工作的功能。

    【讨论】:

    • 感谢 Ólafur 的回复。如果可能的话,您能否评论每一行以便我更好地理解? K
    • 感谢您的解释,但无法理解您的实际例子,您能解释一下吗?提前谢谢你。
    【解决方案3】:

    构造函数的思想是为对象准备初始的一堆数据,所以它可以按预期运行。

    Just call a method 不是一个交易,因为你可能会忘记这样做,而且这不能在语法中指定为“工作前必需” - 所以你会得到“损坏”的对象。

    【讨论】:

    • @Keith:引用 Wikipedia(我通常不会,但在这种情况下写得很好):“[构造函数] 的任务是初始化对象的数据成员并建立类的不变量,如果不变量无效则失败。正确编写的构造函数将使对象处于有效状态。"
    • @netcoder:是的,我在写完答案后立即查看了那里 - 来测试自己 ;-) 因为没有显着差异,而且因为 SO 是 人们回答的网站(不仅仅是复制粘贴)-我会离开我的,即使它的英文写得更差;-)
    【解决方案4】:

    构造函数适用于各种各样的事情。他们在你的类中初始化变量。假设您正在创建一个 BankAccount 类。 $b = 新银行账户(60);有一个构造函数,它给银行账户一个初始值。他们基本上在类中设置变量,或者他们也可以初始化其他类(继承)。

    【讨论】:

      【解决方案5】:

      构造函数用于在创建对象时进行初始化。

      您不希望在新创建的对象上调用任意方法,因为这违背了封装的理念,并且需要使用该对象的代码对其内部工作有固有的了解(并且需要更多的努力)。

      【讨论】:

      • 调用一个setter方法,例如,在对象被创建之后完全不违反封装。构造函数用于定义对象按预期运行所需的属性/参数。
      • @netcoder 是的,但如果构造函数涉及,例如连接到数据库,您不一定期望调用代码必须调用方法来执行此操作,因为您甚至可能不希望调用代码以了解对象从何处获取其信息。好点,不过
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-19
      • 1970-01-01
      • 2023-03-21
      • 1970-01-01
      • 2011-06-24
      相关资源
      最近更新 更多