0

我只是意识到我一直在这样做,而且当我使用时,对象的属性似乎仍在设置中

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

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

4

1 回答 1

1
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将在对象实例化时保持值一。

希望这可以帮助你。

于 2012-05-09T04:38:22.707 回答