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); // true7.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 위키)