9월 23, 2026
1) 프로퍼티 훅(Property Hooks) — 게터/세터를 선언 없이 속성에 직접!
class User {
    public string $name {
        // 읽을 때 동작
        get => $this->name;
        // 쓸 때 동작 (들어오는 값 가공/검증 가능)
        set => $this->name = mb_ucfirst(trim($value));
    }

    // 일반 필드와 함께 혼용 가능
    public int $age {
        set => $this->age = max(0, (int)$value);
        get => $this->age;
    }
}

$u = new User;
$u->name = '  hong gil-dong  ';   // set 훅이 작동: "Hong gil-dong"
echo $u->name;                    // get 훅이 작동


7.3에서는 getName()/setName() 같은 별도 메서드를 직접 만들었어야 했죠. 8.4는 속성 선언부에서 곧장 get/set 로직 정의가 됩니다. (PHP, Zend)

2) 비대칭 가시성(Asymmetric Visibility) — 읽기/쓰기 권한을 다르게
class Article {
    // 어디서나 읽기 가능(public), 쓰기는 같은 클래스만(private(set))
    public private(set) string $title;

    // 내부와 상속에서만 쓰기(protected(set)), 읽기는 public
    public protected(set) string $status = 'draft';

    public function __construct(string $title) {
        $this->title = $title;  // OK (클래스 내부)
    }
}

$a = new Article('Hello');
echo $a->title;      // OK (public read)
$a->title = 'Hi';    // ❌ Error (private(set))


읽기와 쓰기의 가시성을 따로 둘 수 있어, DTO/엔티티에서 “밖에서는 읽기만” 같은 제약을 간결하게 표현합니다. 훅과도 함께 동작합니다. (PHP 위키, Zend)

3) array_find / array_find_key / array_any / array_all — 배열 탐색의 정석
$users = [
  ['id'=>1,'name'=>'Kim','age'=>29],
  ['id'=>2,'name'=>'Lee','age'=>41],
  ['id'=>3,'name'=>'Park','age'=>19],
];

// 조건에 맞는 "첫 값"
$adult = array_find($users, fn($u) => $u['age'] >= 30);
// ['id'=>2,'name'=>'Lee','age'=>41]

// 조건에 맞는 "첫 키"
$key   = array_find_key($users, fn($u) => $u['name'] === 'Park'); // 2

// 하나라도/전부 만족?
$hasTeen = array_any($users, fn($u) => $u['age'] < 20);  // true
$allAdult= array_all($users, fn($u) => $u['age'] >= 19); // true


7.3에서는 foreach로 직접 돌리거나 array_filter()[0]??null 같은 우회가 필요했는데, 8.4는 짧고 의미가 분명해졌습니다. (PHP.Watch, PHP)

4) new 뒤 괄호 생략 + 즉시 체이닝
class Box {
    public function set(int $v): self { /* ... */ return $this; }
    public function get(): int { /* ... */ return 42; }
}

// 예전: (new Box())->set(10)->get();
$value = new Box->set(10)->get();   // 8.4: 괄호 생략 OK


괄호 없이 new Class->method() 체이닝이 허용됩니다. 가독성이 좋아지고 중간 임시 변수를 줄일 수 있어요. (Stitcher, PHP 위키)

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다