我只是意识到我一直在这样做,而且当我使用时,对象的属性似乎仍在设置中
object->set($property, $value);
在这种情况下,预期的行为是什么?
object->set($property, $value);
set 在这里只是对象对象的一个方法,可能您指的是setter方法。它接受两个参数并将其传递给类属性。设置类的行为取决于 set 方法的代码,使用这种方法有一些好处。
有两种方法可以将数据存储在类中,一种方法是直接将值分配给类属性,例如
class Foo {
public $a;
public $b;
}
如果您需要将值分配给您想要的类属性。
$object = new Foo();
$object->a = 'hello';
$object->b = 'world';
现在类属性 $a 将包含值 hello 并且类属性 $b 将包含值 world,但是这种方法存在一个问题,我们永远无法告诉用户应该输入什么类型的数据。如果我们需要仅在 $a 中存储整数,我们无法做到这一点。为了克服这个问题,您可以使用 setter 方法,其中我们将类属性声明为受保护或私有,并通过类方法设置值。
class Foo {
protected $a;
protected $b;
public function set($a) {
//you can validate the data here before assigning.
$this->a = $a;
}
}
您可以简单地 google 一下 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();
这将导致错误。因为您没有提供用户 ID。所以正确的方法是。
$object = new Bar(1);
现在类属性$userId
将在对象实例化时保持值一。
希望这可以帮助你。