PHP 8 게터의 모든 맛
13775 단어 phpprogrammingcodequalitybeginners
아니면 있습니까? 🤨
오늘은 PHP 8.0에서 getter를 구현할 수 있는 10가지 방법을 소개하겠습니다.
시작하자!
공개 액세스
class User
{
public string $name = "Robert PAULSON";
}
✅ 장점
❌ 단점
클래식 게터
class User
{
public function getName(): string
{
return "Robert PAULSON";
}
}
✅ 장점
❌ 단점
동사가 없는 고전적인 getter
class User
{
public function name(): string
{
return "Robert PAULSON";
}
}
✅ 장점
❌ 단점
게터/세터
class User
{
private string $name = "Robert PAULSON";
public function name(?string $name = null): string
{
if ($name) {
$this->name = $name;
}
return $this->name;
}
}
✅ 장점
❌ 단점
null
로 설정하려면 어떻게 합니까? 매직 게터
/**
* @property string $name
*/
class User
{
private string $name = "Robert PAULSON";
public function __get($key)
{
if ($key == 'name') {
return $this->name;
}
}
}
✅ 장점
❌ 단점
@property
가 필요합니다. 그렇지 않으면 PHPStorm이 이를 "볼"수 없습니다오프셋 게터
class User extends ArrayAccess
{
public offsetExists($offset): bool
{
return $offset == 'name';
}
public offsetGet($offset)
{
if ($offset == 'name') {
return 'Robert PAULSON';
}
}
}
✅ 장점
$object['name']
표기❌ 단점
매직 콜
/**
* @method string getName()
*/
class User
{
public function __call($method, $args)
{
if ($method == 'getName') {
return 'Robert PAULSON';
}
}
}
✅ 장점
❌ 단점
@method
가 필요합니다. 그렇지 않으면 PHPStorm이 이를 "볼"수 없습니다참조 게터
class User
{
private string $name = "Robert PAULSON";
public function &getName(): string
{
return $this->name;
}
}
// usage
$user = new User;
var_dump($user); // string(14) "Robert PAULSON"
$name = &$user->getName();
$name = "Tyler DURDEN";
var_dump($user); // string(12) "Tyler DURDEN"
✅ 장점
❌ 단점
캡슐화 위반
class User
{
private string $name = "Robert PAULSON";
}
// can't access $name because it's private
// and there's no getter to obtain its value
$user = new User();
// let's use the reflection API
$property = (new ReflectionClass(User::class))->getProperty('name');
$property->setAccessible(true);
$name = $property->getValue($user);
echo $name; // Robert PAULSON
✅ 장점
❌ 단점
클로저 반환
class User
{
private $name = "Robert PAULSON";
public function obtainNameGetter(): callable
{
return fn() => $this->name;
}
public function setName(string $name): void
{
$this->name = $name;
}
}
// usage
$user = new User();
$getter = $user->obtainNameGetter();
echo $getter(); // "Robert PAULSON"
// now let's change the username
$user->setName("Tyler DURDEN");
echo $getter(); // "Tyler DURDEN"
✅ 장점
❌ 단점
내가 뭐 놓친 거 없니? 댓글로 이 목록에 대해 어떻게 생각하는지 알려주고 좋아요/팔로우를 잊지 마세요. 더 많은 기사를 쓸 수 있도록 동기를 부여합니다 🤗
Reference
이 문제에 관하여(PHP 8 게터의 모든 맛), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/bdelespierre/all-flavors-of-php-8-getters-51no텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)