To proste pytanie. Widziałem wiele przypadków, w których kod jest realizowane tak:OOP - korzystanie z prywatnych nieruchomości i publicznego gettera
class User
{
private $id;
private $firstname;
private $lastname;
public function __construct() { some code }
public function getId() { return $this->id; }
public function getFirstname() { return $this->firstname; }
public function setFirstname($value) { $this->firstname = $value; }
}
// And properties are accessed like:
$user->getFirstname();
$user->getId();
Więc co jest powodem korzystania z własności prywatnej i posiadające pobierające publicznych, zamiast tworzenia własności publicznej i dostęp do nich bezpośrednio, takich jak:
$user->firstname;
PS: Czy jest OK, jeśli używam drugiej metody?
EDIT
Wydaje się, że nie dobrze badań przed tym pytaniem (chyba źle używane klawisze, aby szukać na ten temat). Oto kolejna dobra odpowiedź na (prawie) to samo pytanie: https://stackoverflow.com/a/1568230/1075534
Zasadniczo, za moim przypadku jeden dobry powód, aby korzystać z pobierające i ustawiające ma unikać zmieniania 250 klas, które bezpośrednio dostępu do właściwości. Tak na przykład, wyobraźmy sobie, że nie był przy użyciu getter:
class User
{
public $firstname = 'abc';
public $lastname = 'cde';
}
$user = new User();
echo $user->firstname . ' ' . $user->lastname;
Teraz wyobraź sobie, że chcę zmienić zachowanie mojej aplikacji i zdecyduję się drukować nazwiska jak kapitalizowane. W takim przypadku przeszukałbym każdą implementację (w tym przypadku 250) i zamieniłabym dane wyjściowe w miejscu, w którym nazwałem właściwości. Ale raczej Gdybym użył getter to bym po prostu zmienić metodę getter:
class User
{
private $firstname = 'abc';
private $lastname = 'def';
public getFirstname()
{
return ucfirst(strtolower($this->firstname));
}
public getLastname()
{
return ucfirst(strtolower($this->lastname));
}
}
także pamiętać, że getter może gromadzić nie tylko informacje z jednego domu. Wyobraźmy sobie, co następuje:
class User
{
private $firstname = 'abc';
private $lastname = 'def';
public function getName()
{
return $this->firstname . ' ' . $this->lastname;
}
}
dla tych, którzy nadal masz pytania na ten temat, proponuję im czytanie materiałów, które dostarczone a zwłaszcza Gordon odpowiedź, że mam powiązany.
Należy odczytać kod Kompletna 2. Ma doskonałe wyjaśnienie na ten temat i inne koncepcje rozwoju oprogramowania. – Gohn67