Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用构造函数的好处?_Php_Oop_Constructor - Fatal编程技术网

Php 使用构造函数的好处?

Php 使用构造函数的好处?,php,oop,constructor,Php,Oop,Constructor,在我尝试学习PHP中OOP的过程中。我已经多次遇到构造函数,不能再忽略它了。在我的理解中,构造函数在我创建对象时被调用,这是正确的吗 但是如果我可以使用“普通”函数或方法作为它们的调用,为什么我需要创建这个构造函数呢 干杯, Keith是在创建对象时调用构造函数 构造函数有用性的一个小例子是 class Bar { // The variable we will be using within our class var $val; // This function i

在我尝试学习PHP中OOP的过程中。我已经多次遇到构造函数,不能再忽略它了。在我的理解中,构造函数在我创建对象时被调用,这是正确的吗

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

干杯,
Keith

是在创建对象时调用构造函数

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

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);
更新:
还有一个问题问为什么要使用它,一个真实的例子是一个数据库类,在这个类中,您使用用户名、密码和要连接的表调用对象,构造函数将连接到该对象。然后,您就拥有了在该数据库中完成所有工作的函数。

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

构造函数的思想是为对象准备一组初始数据,这样它就可以正常工作


只要调用一个方法就可以了,因为你可以忘记这样做,而且这不能在语法中指定为“工作前所需”——因此你会得到“断开的”对象。

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

构造函数用于在创建对象时完成初始化


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

感谢您的回复。如果可能的话,你能评论每一行让我更好地理解吗?谢谢你的解释,但你无法理解你的真实生活的例子,你能解释更多吗??提前谢谢你。另外,看看哪个问同样的问题。哈哈,太好笑了。这是我完全忘记的问题。问我的问题时,我在看相关的问题,什么也没看到。很抱歉,我不能删除这个问题,因为答案太多了。还剩2年,什么都没有改变)。例如,在创建对象后调用setter方法根本不会违反封装。构造函数用于定义对象按预期行为所需的属性/参数。@netcoder True,但如果构造函数涉及(例如)连接到数据库,则您不一定期望调用代码必须调用方法来完成此操作,因为您可能甚至不想让调用代码知道对象从何处获取信息。说得好,though@Keith:引用Wikipedia(我通常不这么做,但在这种情况下写得很好):“[构造函数]的任务是初始化对象的数据成员并建立类的不变量,如果不变量无效,则失败。正确编写的构造函数将使对象保持有效状态。”@网络编码员:是的,我在写完我的答案后马上看了那里——来测试我自己;-)既然没有明显的区别,既然人们回答(不仅仅是复制粘贴)的网站也是如此,我就离开我的网站,即使它的英文写得更差;-)