ホームページ > バックエンド開発 > PHPチュートリアル > PHP 属性: PHP 属性の使用方法とカスタム属性クラスの作成方法 – 簡単なヒント

PHP 属性: PHP 属性の使用方法とカスタム属性クラスの作成方法 – 簡単なヒント

WBOY
リリース: 2024-08-23 16:30:32
オリジナル
1057 人が閲覧しました

PHP 属性は PHP 8.0 で導入されました。このバージョンは、コード宣言にメタデータを追加するための属性の導入など、いくつかの新機能と改善をもたらし、この言語にとって重要なマイルストーンとなりました。

私が初めて属性を扱わなければならなかったのは、Inspector の PHP ライブラリの問題が原因でした。 GitHub で確認してください。ソリューションを深く掘り下げる前に、属性とは何か、そしてそれらを PHP コードでどのように使用できるかについて概要を理解しましょう。

属性は、クラス、メソッド、プロパティなどの宣言にメタデータを追加できる強力な機能です。これらのメタデータはプログラムで取得できるため、よりクリーンで、より整理され、効率的なコードの新たな可能性が開かれます。

属性は実行時には効果がないことに注意してください。これらはリフレクション API で使用でき、クラス、メソッド、またはプロパティに付加された属性に基づいて実行したいものをアプリケーションに認識させることができます。

組み込み属性

PHP には、さまざまな目的を果たすいくつかの組み込み属性が付属しています。注目すべきものをいくつか紹介します:

@非推奨

関数またはメソッドを非推奨としてマークし、将来のバージョンで削除される可能性があるため回避する必要があることを示します。

#[Deprecated("Use newFunction() instead")]
function oldFunction() 
{
    // Function implementation
}
ログイン後にコピー

@オーバーライド

子クラスのメソッドが親クラスのメソッドをオーバーライドすることを目的としていることを確認します。

class Child extends Parent {
    #[Override]
    public function defaultMethod() 
    {
        // Method implementation
    }
}
ログイン後にコピー

defaultMethod() が最終的に親クラスでその名前を変更する場合、これはオーバーライドではなくなります。この場合、PHP はオーバーライドになると明示的に宣言しているため、警告を発し、不整合について警告します。

とにかく、優れた IDE を使用すれば、この種の間違いを避けることができます。

@SuppressWarning

コードの特定の部分に対する特定の警告を抑制します。

#[SuppressWarnings("SomeWarning")]
function someFunction() 
{
    // Function implementation
}
ログイン後にコピー

カスタム属性クラスの作成

次に、カスタム属性クラスを作成しましょう。これは、属性内で特定の動作をカプセル化する場合に役立ちます。

#[Attribute]
class CustomAttribute 
{
    public string $message;

    public function __construct(string $message) 
    {
        $this->message = $message;
    }
}
ログイン後にコピー

その後、このカスタム属性をさまざまな要素で使用できます。

class MyClass 
{
    #[CustomAttribute("This is a custom attribute")]
    public $myProperty;

    #[CustomAttribute("Another custom attribute")]
    public function myMethod() 
    {
        // Method implementation
    }
}
ログイン後にコピー

使用例

実際的な例を見てみましょう。 Web アプリケーションを構築していて、文字列の長さを定義するカスタム属性を作成するとします。

#[Attribute(Attribute::TARGET_PROPERTY)]
class MaxLength 
{
    public int $maxLength;

    public function __construct(int $maxLength) 
    {
        $this->maxLength = $maxLength;
    }
}
ログイン後にコピー

上記の例では、属性をクラス プロパティにのみ適用する機能を制限しました。これで、User クラスで使用できるようになりました。

class User 
{
    #[MaxLength(20, message: "Username must be 20 characters or less")]
    public string $username;

    // Other properties and methods
}
ログイン後にコピー

前に述べたように、属性をプロパティに追加しても、実行中には影響がありません。しかし、リフレクションを使用してこの情報を取得し、最終的に何らかのアクションを実行できるようになりました。

PHPフレームワークによる採用

Symfony や Laravel などの最もよく使用されている PHP フレームワークは、基本的に「アノテーション」を置き換える属性をすでに採用しています。 Symfony 5.2 以降では、コントローラーを宣言し、属性を使用してルートに接続できます:

public class Arrayable implements \ArrayAccess
{
    …

    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}
ログイン後にコピー

PHP 8 以降、ArrayAccess インターフェイスの定義は次のように変更されました。

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

属性を使用して、オフセット関数の引数のデータ型の宣言を強制しました。 LanguageLevelTypeAware 属性を使用すると、実装が引数のデータ型を提供しない場合、「非推奨警告」が発生します。

ただし、関数の引数でデータ型を宣言すると、引数のデータ型宣言をサポートしていない古いバージョンの PHP との互換性が失われます。

これは将来の変更に対する単なる警告であるため、警告を抑制するために別の組み込み PHP 属性を使用して問題を解決しました。

public class Arrayable implements \ArrayAccess
{
    …

    #[\ReturnTypeWillChange]
    public function offsetExists($offset)
    {
        return isset($this->data[$offset]);
    }

    …
}
ログイン後にコピー

ReturnTypeWillChange 属性は、言語の将来の変更について知っており、必要な更新をすでに計画していることを PHP に伝えるだけです。

特にこの変更については、PHP 9 で確実に実装される予定です。

コードベースをクリーンで十分に文書化した状態に保ち、属性を慎重に使用することを忘れないでください。これは、拡張性、保守性、効率性が最重要視される SaaS 製品開発において特に重要です。

検査官は初めてですか?アプリケーションを無料で監視する

Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバー レベルで何もインストールする必要はありません。composer パッケージ をインストールするだけで準備完了です。

他の複雑なオールインワン プラットフォームとは異なり、Inspector は非常に簡単で、PHP に優しいです。 Laravel または Symfony パッケージを試すことができます。

効果的な自動化、深い洞察、アラートや通知をメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。

또는 웹사이트에서 자세한 내용을 알아보세요: https://inspector.dev

PHP Attributes: how to use PHP Attributes and create custom attribute classes – Fast Tips

以上がPHP 属性: PHP 属性の使用方法とカスタム属性クラスの作成方法 – 簡単なヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート