我只是意识到我一直在这样做,而且当我使用
时,似乎对象的属性仍在设置中object->set($property, $value);
在这种情况下预期的行为是什么?
答案 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。
希望这会对你有所帮助。