[PHP9] PHP 9 > Web/PHP/API

본문 바로가기
사이트 내 전체검색

Web/PHP/API

[PHP9] PHP 9

페이지 정보

작성자 sbLAB 댓글 0건 조회 41회 작성일 24-04-28 17:22

본문

 What's new in PHP 9 

https://yarnaudov.com/new-in-php-9.html 


PHP RFC: Deprecate dynamic properties 

https://wiki.php.net/rfc/deprecate_dynamic_properties 


1. 변수 초기화 강제.

http://docs.php.net/manual/kr/types.comparisons.php 


2. 클래스 동적 프로퍼티 자동 추가 허용안함(기본값).


[기존 php8 이하] - 경고는 하지만 실행완료

<?php
class planet
{
    function __construct($id, $a, $m) {
        $this->a = $a;
        $this->id = $id;
        $this->m = $m;
        $this->n = .9856076686 / ($a * sqrt($a));
    }
}

$pl = [
    new planet("Mercury", .38709831, 3.3011e23),
    new planet("Venus", .723332982, 4.8675e24)
];
echo $pl[0]->n;
echo "\n";
echo $pl[1]->n;

?>

[Result]
Deprecated: Creation of dynamic property planet::$a is deprecated in /tmp/h8LaXZUAtT.php on line 6 Deprecated: Creation of dynamic property planet::$id is deprecated in /tmp/h8LaXZUAtT.php on line 7 Deprecated: Creation of dynamic property planet::$m is deprecated in /tmp/h8LaXZUAtT.php on line 8 Deprecated: Creation of dynamic property planet::$n is deprecated in /tmp/h8LaXZUAtT.php on line 9 Deprecated: Creation of dynamic property planet::$a is deprecated in /tmp/h8LaXZUAtT.php on line 6 Deprecated: Creation of dynamic property planet::$id is deprecated in /tmp/h8LaXZUAtT.php on line 7 Deprecated: Creation of dynamic property planet::$m is deprecated in /tmp/h8LaXZUAtT.php on line 8 Deprecated: Creation of dynamic property planet::$n is deprecated in /tmp/h8LaXZUAtT.php on line 9 4.0923442626812 1.6021260118792
 



[php9 이상] - Throws Error exception. 다른 언어처럼 planet 클래스의 property 멤버 변수 명시적 선언 강제.


<?php
class planet
{
    public $id;
    public $a;
    public $m;
    public $n;

    function __construct($id, $a, $m) {
        $this->a = $a;
        $this->id = $id;
        $this->m = $m;
        $this->n = .9856076686 / ($a * sqrt($a));
    }
}

$pl = [
    new planet("Mercury", .38709831, 3.3011e23),
    new planet("Venus", .723332982, 4.8675e24)
];
echo $pl[0]->n;
echo "\n";
echo $pl[1]->n;

?>


[Result] 4.0923442626812 1.6021260118792

 


또는 #[\AllowDynamicProperties]  attributes 사용하여 이전처럼 자동생성 허용[권장하지않음]


<?php
#[\AllowDynamicProperties]
class planet
{
    function __construct($id, $a, $m) {
        $this->a = $a;
        $this->id = $id;
        $this->m = $m;
        $this->n = .9856076686 / ($a * sqrt($a));
    }
}

$pl = [
    new planet("Mercury", .38709831, 3.3011e23),
    new planet("Venus", .723332982, 4.8675e24)
];
echo $pl[0]->n;
echo "\n";
echo $pl[1]->n;

?>


[Result]

4.0923442626812 1.6021260118792

 



PHP8.2 이하에서 planet 클래스 설계에 없는 멤버변수를 호출시 멤버변수 자동 생성되었으나 php9에서 불가능(기본값).

※ 기존 문제 예) 멤버변수 a를 콜하려고 하였지만, aa 오타로 호출했을 때 코더의 의도 판단 할 수 없어 멤버변수 생성 통과.


<?php
class planet
{
    public $a;
    public $id;

    function __construct($a, $id) {
        $this->a = $a;
        $this->id = $id;
    }
}

$pl =  new planet("Mercury",100);

echo $pl->a;
echo "\n";
echo $pl->id;
echo "\n";

$pl->none="oops"; //??
echo $pl->none; //??
?>


[Result]

Mercury 100 Deprecated: Creation of dynamic property planet::$none is deprecated in /tmp/U6HuK5Qs9j.php on line 21 oops

 






댓글목록

등록된 댓글이 없습니다.

회원로그인

접속자집계

오늘
86
어제
304
최대
1,279
전체
227,829

그누보드5
Copyright © sebom.com All rights reserved.