AllowDynamicProperties アトリビュート

(PHP 8 >= 8.2.0)

はじめに

このアトリビュートを使うと、 クラスに 動的なプロパティ を許可することをマークできます。

注意:

アトリビュート自体は継承されませんが、 AllowDynamicProperties アトリビュートの効果は継承されます。 このアトリビュートでマークされたクラスの子クラスは、 明示的にアトリビュートを宣言していなくても、動的なプロパティが許可されます。

注意:

このアトリビュートは、動的なプロパティを明示的に許可する手段として PHP 8.2.0 で導入されました。 このアトリビュートを使っておらず、かつ __get() も __set() も実装していないクラスで 動的なプロパティを作成することは非推奨です。

クラス概要

#[\Attribute(\Attribute::TARGET_CLASS)]
final class AllowDynamicProperties {
/* メソッド */
public function __construct()
}

例

例1 動的なプロパティに対する AllowDynamicProperties

動的なプロパティを許可するには、クラスに #[\AllowDynamicProperties] を付けます。

<?php
#[\AllowDynamicProperties]
class ValidExample { }

$obj = new ValidExample();
$obj->myDynamicProp = 1234;
?>

例2 存在しないプロパティに対する AllowDynamicProperties

PHP 8.2.0 以降、このアトリビュートを使っていないクラスでは、 プロパティの宣言が必要です。 そのようなクラスで宣言されていないプロパティを作成すると、 推奨されない警告が発生します。

<?php
class InvalidExample { }

$obj = new InvalidExample();
$obj->myUnknownProperty = 1234;
?>

上の例の PHP 8.2 での出力は、このようになります。:

Deprecated: Creation of dynamic property InvalidExample::$myUnknownProperty is deprecated in file on line 5

例3 継承クラスでの存在しないプロパティに対する AllowDynamicProperties

<?php
class DefaultBehaviour { }

#[\AllowDynamicProperties]
class ClassAllowsDynamicProperties { }

class InheritedClassAllowsDynamicProperties extends ClassAllowsDynamicProperties { }

$o1 = new DefaultBehaviour();
$o2 = new InheritedClassAllowsDynamicProperties();

$o1->nonExistingProp = true;
$o2->nonExistingProp = true;
?>

上の例の PHP 8.2 での出力は、このようになります。:

Deprecated: Creation of dynamic property DefaultBehaviour::$nonExistingProp is deprecated in file on line 12

目次

+add a note

User Contributed Notes

There are no user contributed notes for this page.