-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PHP8.1 #191
Comments
列挙型(Enumerations)https://www.php.net/manual/ja/language.enumerations.php enum Status
{
case Draft;
case Published;
case Archived;
}
function acceptStatus(Status $status) {...} PHPでは列挙型はクラスであり、定義されるcaseはそれぞれインスタンス。 $a = Suit::Spades;
$b = Suit::Spades;
$a === $b; // true
$a instanceof Suit; // true 列挙型はメソッドを持つことができる。 コンストラクタやデストラクタは無い。 列挙型は内部的に |
値に依存した列挙型(Backed Enumerations)各caseがスカラー値を持つ列挙型 enum Suit: string
{
case Hearts = 'H';
case Diamonds = 'D';
case Clubs = 'C';
case Spades = 'S';
} Backed Enum の各ケースは Backed Case と呼ばれる。 case が持つ値は整数か文字列のみで、同じ列挙型の中にはいずれか一方の型しか持てない。 |
readonly 修飾子https://wiki.php.net/rfc/readonly_properties_v2 読み込み専用のプロパティ。 class BlogData
{
public readonly Status $status;
public function __construct(Status $status)
{
$this->status = $status;
}
} 一度値が割り当てられた後は読み込みしかできない。 型付きのプロパティにしか使用できない。 デフォルト値を設定できない。 |
第一級Callablehttps://wiki.php.net/rfc/first_class_callable_syntax $foo = [$this, 'foo'];
↓
$foo = $this->foo(...);
$fn = Closure::fromCallable('strlen');
↓
$fn = strlen(...);
クロージャが作成された時点のスコープを尊重する。 |
関数のデフォルト引数でnewhttps://wiki.php.net/rfc/new_in_initializers class Service
{
private Logger $logger;
public function __construct(
Logger $logger = new NullLogger(),
) {
$this->logger = $logger;
}
} デフォルト引数でnewを使えるようになった。 static $x = new Foo;
const C = new Foo;
function test($param = new Foo) {}
#[AnAttribute(new Foo)]
class Test {
public function __construct(
public $prop = new Foo,
) {}
} クラスのstatic変数や定数に指定した場合、クラスが使用されたタイミングで new が実行される。
ネストしたアトリビュートが書けるようになった。 #[Assert\All(new Assert\NotNull, new Assert\Length(max: 6))] |
交差型(Intersection)https://wiki.php.net/rfc/pure-intersection-types function count_and_iterate(Iterator&Countable $value) {
...
} 複数の型制約を同時に満たすことを要求する際に使用する。 交差型に使用できるのかインターフェースかクラスのみ。 |
never型https://wiki.php.net/rfc/noreturn_type 関数が返らないことを表す戻り値。 他の全ての型のサブタイプであり、継承時に他の戻り値を置き換えることができる。 関数内で return や yield は使えない。
|
finalクラス定数https://wiki.php.net/rfc/final_class_const class Foo {
final public const XX = "foo";
} クラス定数に ちなみにインターフェースの定数はもともとオーバーライドできなかった。 |
8進数のプレフィックスhttps://wiki.php.net/rfc/explicit_octal_notation 0o16 === 16; // false
0o16 === 14; // true 8進数のプレフィックスとして
|
Fiberhttps://www.php.net/manual/en/class.fiber.php プリミティブ? Fiberについて記述された記事の翻訳 コルーチンやグリーンスレッドというもののPHPでの実装と考えるのが良さそう? ※イベントループ |
連想配列のアンパック$arrayA = ['a' => 1];
$arrayB = ['b' => 2];
$result = ['a' => 0, ...$arrayA, ...$arrayB];
// ['a' => 1, 'b' => 2] 今まで配列で使えていたスプレッド演算子が連想配列でも使用できるようになった。 |
array_is_list()https://www.php.net/manual/en/function.array-is-list.php 指定した配列がリストであるかどうかを判定する。 |
$GLOBAL配列へのアクセスの制限$GLOBALS 配列全体への書き込みアクセスはサポートされない。 |
https://www.php.net/archive/2021.php#2021-11-25-1
https://www.php.net/releases/8.1/en.php
https://www.php.net/manual/en/migration81.php
The text was updated successfully, but these errors were encountered: