Как установить переменные класса в PHP?

У меня есть класс в php, и я хочу знать, существует ли конкретное соглашение о том, как установить эти частные переменные в моем конструкторе.

Должен ли я установить их с моим setter или с this?

class foo {

private $bar;

public function __construct($foobar) {
$this->bar = $foobar;
}

public function setBar($bar) {
$this->bar = $bar;
}

public function getBar() {
return $this->bar;
}
}

ИЛИ ЖЕ

class foo {

private $bar;

public function __construct($foobar) {
$this->setBar($foobar);
}

public function setBar($bar) {
$this->bar = $bar;
}

public function getBar() {
return $this->bar;
}
}

Или мой вопрос просто философский?
Тот же вопрос можно задать с getters, Но я думаю, что вы должны использовать setters а также getters при обработке личных переменных вашего родительского класса.

2

Решение

Вы должны использовать setBar в конструкторе из-за проверки данных и будущего обслуживания.

// a developer introduces a bug because the string has padding.
$foo->setBar("chickens   ");

// the developer fixes the bug by updating the setBar setter
public function setBar($bar) {
$this->bar = trim($bar);
}

// the developer doesn't see this far away code
$f = new foo("chickens   ");

Разработчик отправляет код в производство, думая, что он исправил ошибку.

2

Другие решения

В таком тривиальном примере, да, ваш вопрос в основном философский! 🙂
Однако, если ваш установщик будет выполнять какие-то особые действия (например, проверять правильность ввода или модифицировать его), я бы порекомендовал использовать вторую схему.

1

Это:

  class foo {

private $bar;

public function __construct($foobar) {
$this->bar = $foobar;
}

public function setBar($bar) {
$this->bar = $bar;
}

public function getBar() {
return $this->bar;
}
}

ничем не отличается от этого:

класс foo {

 public function __construct($bar){
$this->bar = $bar;
}

public $bar;

Одна из причин использования метода получения и установки заключается в том, что вы разрешаете устанавливать переменную только при построении объекта, как показано ниже:

class foo {

private $bar;

public function __construct($foobar) {
$this->bar = $foobar;
}public function getBar() {
return $this->bar;
}
}

Так что не злоупотребляйте геттерами и сеттерами без необходимости

1
По вопросам рекламы [email protected]