>  기사  >  백엔드 개발  >  PHP - 최신 및 최고를 발견하세요

PHP - 최신 및 최고를 발견하세요

WBOY
WBOY원래의
2024-09-10 20:32:401122검색

PHP  - Discover the Latest and Greatest

Die Veröffentlichung von PHP 8.4 ist für den 21. November 2024 geplant und bietet einige aufregende neue Funktionen und Verbesserungen. In diesem Blogbeitrag werden wir einige der interessantesten Ergänzungen und Änderungen untersuchen:

  1. Neue Array-Hilfsfunktionen
  2. Eigenschaftshaken
  3. 'neu' ohne Klammern
  4. Implizit nullfähige Parameterdeklarationen veraltet
  5. Neue Multibyte-Funktionen

1. Neue Array-Hilfsfunktionen

Die folgenden Varianten von Array-Hilfsfunktionen werden in PHP 8.4 hinzugefügt:

  • array_find()
  • array_find_key()
  • array_any()
  • array_all()

Diese Funktionen benötigen ein Array und eine Rückruffunktion und geben Folgendes zurück:

functions Return value
array_find() Returns the first element that meets the callback condition; NULL otherwise.
array_find_key() Returns the key of the first element that meets the callback condition; NULL otherwise.
array_any() Returns true if at least one element matches the callback condition; false otherwise.
array_all() Returns true if all elements match the callback condition; false otherwise.

참고: array_find()는 일치하는 첫 번째 요소만 검색합니다. 여러 항목이 일치하는 경우 array_filter() 사용을 고려하세요.

키-값 쌍과 콜백 함수가 있는 배열이 있는 경우:

$array = ['1'=> 'red', '2'=> 'purple', '3' => 'green']

function hasLongName($value) {
  return strlen($value) > 4;
}

새 기능을 사용하는 방법은 다음과 같습니다.

  1. 배열_찾기():

      // Find the first color with a name length greater than 4
    
      $result1 = array_find($array, 'hasLongName');
    
      var_dump($result1);  // string(5) "purple"
    
  2. array_find_key():

      // Find the key of the first color with a name length greater than 4
    
      $result2 = array_find_key($array, 'hasLongName');
    
      var_dump($result2);  // string(1) "2"
    
  3. array_any():

      // Check if any color name has a length greater than 4
    
      $result3 = array_any($array, 'hasLongName');
    
      var_dump($result3);  // bool(true)
    
  4. 배열_모두():

      // Check if all color names have a length greater than 4
    
      $result4 = array_all($array, 'hasLongName');
    
      var_dump($result4);  // bool(false)
    

2. 속성 후크

PHP 8.4에는 클래스의 개인 속성 또는 보호 속성에 액세스하고 수정하는 보다 우아한 방법을 제공하는 속성 후크가 도입되었습니다. 이전에는 개발자가 getter, setter 및 매직 메서드(__get 및 __set)에 의존했습니다. 이제 속성에서 직접 get 및 set 후크를 정의하여 상용구 코드를 줄일 수 있습니다.

세미콜론으로 속성을 끝내는 대신 코드 블록 {}을 사용하여 속성 후크를 포함할 수 있습니다.
이 후크는 선택 사항이며 독립적으로 사용할 수 있습니다. 둘 중 하나를 제외하여 속성을 읽기 전용 또는 쓰기 전용으로 설정할 수 있습니다.

class User
{
  public function __construct(private string $first, private string $last) {}

  public string $fullName {
    get => $this->first . " " . $this->last;

    set ($value) {
      if (!is_string($value)) {
        throw new InvalidArgumentException("Expected a string for full name,"
        . gettype($value) . " given.");
      }
      if (strlen($value) === 0) {
        throw new ValueError("Name must be non-empty");
      }
      $name = explode(' ', $value, 2);
      $this->first = $name[0];
      $this->last = $name[1] ?? '';
    }
  }
}

$user = new User('Alice', 'Hansen')
$user->fullName = 'Brian Murphy';  // the set hook is called
echo $user->fullName;  // "Brian Murphy"

$value가 정수인 경우 다음 오류 메시지가 표시됩니다.

PHP Fatal error:  Uncaught InvalidArgumentException: Expected a string for full name, integer given.

$value가 빈 문자열인 경우 다음 오류 메시지가 표시됩니다.

PHP Fatal error:  Uncaught ValueError: Name must be non-empty

3. 괄호 없는 'new'

PHP 8.4에는 더 쉬운 구문이 도입되어 새로 생성된 객체에 괄호 없이 메서드를 연결할 수 있습니다. 사소한 조정이지만 코드가 더 깔끔하고 덜 장황해졌습니다.

(new MyClass())->getShortName();  // PHP 8.3 and older
new MyClass()->getShortName();  // PHP 8.4

새로 생성된 객체의 메서드를 연결하는 것 외에도 속성, 정적 메서드 및 속성, 배열 액세스, 클래스 직접 호출을 연결할 수도 있습니다. 예:

new MyClass()::CONSTANT,
new MyClass()::$staticProperty,
new MyClass()::staticMethod(),
new MyClass()->property,
new MyClass()->method(),
new MyClass()(),
new MyClass(['value'])[0],

4. 암시적으로 null을 허용하는 매개변수 선언이 더 이상 사용되지 않음

PHP 8.4 이전에는 매개변수가 X 유형인 경우 X를 null 허용으로 명시적으로 선언하지 않고도 null 값을 허용할 수 있었습니다. PHP 8.4부터 유형 힌트에서 nullable로 명확하게 명시하지 않고는 더 이상 null 매개변수 값을 선언할 수 없습니다. 그렇지 않으면 지원 중단 경고가 발생합니다.

function greetings(string $name = null)  // fires a deprecation warning

경고를 방지하려면 유형 선언에 물음표(?)를 사용하여 매개변수가 null이 될 수 있음을 명시적으로 명시해야 합니다.

function greetings(?string $name)

또는

function greetings(?string $name = null)

5. 새로운 멀티바이트 기능

멀티바이트 문자열은 각 문자가 1바이트 이상의 저장 공간을 사용할 수 있는 일련의 문자입니다. 이는 일본어나 중국어와 같이 복잡하거나 비라틴어 스크립트를 사용하는 언어에서 흔히 발생합니다. PHP에는 mb_strlen(), mb_substr(), mb_strtolower(), mb_strpos() 등과 같은 여러 멀티바이트 함수가 있습니다. 그러나 Trim(), ltrim(), rtrim(), ucfirst(), lcfirst와 같은 일부 함수는 () 등에는 직접적인 멀티바이트 대응이 부족합니다.

새로운 멀티바이트 기능이 추가되는 PHP 8.4 덕분입니다. 여기에는 mb_trim(), mb_ltrim(), mb_rtrim(), mb_ucfirst() 및 mb_lcfirst()가 포함됩니다. 이러한 함수는 추가 $encoding 매개변수와 함께 원래 함수 서명을 따릅니다.
새로운 mb_functions에 대해 논의해 보겠습니다.

  1. mb_trim():

    멀티바이트 문자열의 시작과 끝에서 모든 공백 문자를 제거합니다.

    기능 서명:

      function mb_trim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}", ?string $encoding = null): string {}
    

    매개변수:

    • $string: 잘라낼 문자열입니다.
    • $characters: 잘라낼 문자 목록이 포함된 선택적 매개변수입니다.
    • $encoding: 인코딩 매개변수는 문자열을 해석하는 데 사용되는 문자 인코딩을 지정하여 멀티바이트 문자가 올바르게 처리되도록 합니다. 일반적인 인코딩에는 UTF-8이 포함됩니다.
  2. mb_ltrim():

    멀티바이트 문자열의 시작 부분에서 모든 공백 문자를 제거합니다.

    기능 서명:

      function mb_ltrim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}", ?string $encoding = null): string {}
    
  3. mb_rtrim():

    멀티바이트 문자열 끝에서 모든 공백 문자를 제거합니다.

    기능 서명:

      function mb_rtrim(string $string, string $characters = " \f\n\r\t\v\x00\u{00A0}\u{1680}\u{2000}\u{2001}\u{2002}\u{2003}\u{2004}\u{2005}\u{2006}\u{2007}\u{2008}\u{2009}\u{200A}\u{2028}\u{2029}\u{202F}\u{205F}\u{3000}\u{0085}\u{180E}", ?string $encoding = null): string {}
    
  4. mb_ucfirst():

    주어진 멀티바이트 문자열의 첫 번째 문자를 제목 케이스로 변환하고 나머지 문자는 변경하지 않습니다.

    기능 서명:

      function mb_ucfirst(string $string, ?string $encoding = null): string {}
    
  5. mb_lcfirst():

    mb_ucfirst()와 유사하지만 주어진 멀티바이트 문자열의 첫 번째 문자를 소문자로 변환합니다.

    기능 서명:

      function mb_lcfirst(string $string, ?string $encoding = null): string {}
    

결론

이 블로그가 PHP 8.4의 향후 변경 사항에 대한 좋은 개요를 제공하였기를 바랍니다. 새 버전에는 개발자 경험을 향상시킬 흥미로운 업데이트가 도입된 것으로 보입니다. 정식 출시되면 꼭 사용해 보고 싶습니다.
자세한 정보 및 업데이트를 확인하려면 공식 RFC 페이지를 방문하세요.

위 내용은 PHP - 최신 및 최고를 발견하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.