如果您实例化一个类没有构造函数的对象会发生什么?

时间:2012-05-09 04:17:41

标签: php oop

我只是意识到我一直在这样做,而且当我使用

时,似乎对象的属性仍在设置中
object->set($property, $value);

在这种情况下预期的行为是什么?

1 个答案:

答案 0 :(得分:1)

object->set($property, $value);

set只是这里对象对象的一个​​方法,可能你指的是setter方法。它接受两个参数并将其传递给class属性。设置类的行为取决于set方法的代码,使用此方法有一些好处。

有两种方法可以将数据存储在类中,一种方法是直接将值分配给类属性,例如

class Foo {
    public $a;
    public $b;
}

如果您需要将值分配给您想要的类属性。

$object = new Foo();
$object->a = 'hello';
$object->b = 'world';

现在类属性$ a将包含值hello,类属性$ b将包含值world,但是这种方法存在问题,我们永远无法告诉用户应该输入什么类型的数据。我们只需要在$ a中存储整数,我们就无法做到这一点。为了克服这个问题,你可以使用setter方法,其中我们将class属性声明为protected或private,并通过类方法设置值。

class Foo {
    protected $a;
    protected $b;

   public function set($a) {
       //you can validate the data here before assigning.
       $this->a = $a;
   }
}

你可以简单地谷歌关于getter和setter方法并获取更多信息。

Class Constructor

类构造函数只不过是在实例化对象时自动调用的方法。考虑您要通过强制用户首先提供用户ID来实例化对象。或者您可能希望在调用其他方法之前进行一些有用的计算。这是类构造函数出现的地方。考虑下面的例子

class Bar {

    protected $userId;    

    public function __construct($userId) {
        $this->userId = $userId;
        //any more code execution that needs to be done while instantiating the class can be placed here
    }
}

所以在实例化对象时

$object = new Bar();

这会导致错误。因为你还没有提供userId。所以正确的方法是。

$object = new Bar(1);

现在,类属性$userId将在对象实例化时保存值1。

希望这会对你有所帮助。