PHP 8.5.0 Beta 3 available for testing

ๅˆ—ๆŒ™ๅž‹ใฎๅŸบ็คŽ

ๅˆ—ๆŒ™ๅž‹ใฏใ‚ฏใƒฉใ‚นใซไผผใฆใ„ใพใ™ใ—ใ€ ใ‚ฏใƒฉใ‚นใ‚„ใ‚คใƒณใ‚ฟใƒผใƒ•ใ‚งใ‚คใ‚นใ€ใƒˆใƒฌใ‚คใƒˆใจๅๅ‰็ฉบ้–“ใ‚’ๅ…ฑๆœ‰ใ—ใพใ™ใ€‚ ๅˆ—ๆŒ™ๅž‹ใฏใ‚ชใƒผใƒˆใƒญใƒผใƒ‡ใ‚ฃใƒณใ‚ฐใ‚‚ๅฏ่ƒฝใงใ™ใ€‚ ๅˆ—ๆŒ™ๅž‹ใฏๆ–ฐใ—ใ„ๅž‹ใ‚’ๅฎš็พฉใ—ใพใ™ใŒใ€ ๅ›บๅฎšใฎใ€้™ใ‚‰ใ‚ŒใŸๆ•ฐใฎๆœ‰ๅŠนใชๅ€คใ‚’ๆŒใกใพใ™ใ€‚

<?php

enum Suit
{
case
Hearts;
case
Diamonds;
case
Clubs;
case
Spades;
}
?>

ไธŠ่จ˜ใฎๅฎฃ่จ€ใซใ‚ˆใฃใฆใ€ๆ–ฐใ—ใ„ๅˆ—ๆŒ™ๅž‹ Suit ใŒไฝœใ‚‰ใ‚Œใพใ™ใŒใ€ ใ“ใ‚ŒใŒๆŒใคๆœ‰ๅŠนใชๅ€คใฏ4ใคใ ใ‘ใงใ™ใ€‚ Suit::Heartsใ€Suit::Diamondsใ€Suit::Clubsใ€ใใ—ใฆ Suit::Spades ใงใ™ใ€‚ ใ“ใ‚Œใ‚‰ใฎๆœ‰ๅŠนใชๅ€คใฎใ†ใกใ€ใฒใจใคใ ใ‘ใ‚’ๅค‰ๆ•ฐใซไปฃๅ…ฅใงใใพใ™ใ€‚ ้–ขๆ•ฐใฏๅˆ—ๆŒ™ๅž‹ใซๅฏพใ™ใ‚‹ๅž‹ใƒใ‚งใƒƒใ‚ฏใ‚’่กŒใˆใพใ™ใ—ใ€ ใใฎๅ ดๅˆใฏๅˆ—ๆŒ™ๅž‹ใฎๅ€คใ ใ‘ใŒๆธกใ›ใพใ™ใ€‚

<?php

function pick_a_card(Suit $suit)
{
/* ... */
}

$val = Suit::Diamonds;

// OK
pick_a_card($val);

// OK
pick_a_card(Suit::Clubs);

// TypeError: pick_a_card(): Argument #1 ($suit) must be of type Suit, string given
pick_a_card('Spades');
?>

ๅˆ—ๆŒ™ๅž‹ใฏใ€0ๅ€‹ไปฅไธŠใฎ case ใ‚’ๅฎš็พฉใงใใพใ™ใ€‚ case ใ‚’ๅฎš็พฉใ™ใ‚‹ๆ•ฐใซไธŠ้™ใฏใ‚ใ‚Šใพใ›ใ‚“ใ€‚ case ใŒ0ๅ€‹ใฎๅˆ—ๆŒ™ๅž‹ใ‚‚ๆ–‡ๆณ•็š„ใซใฏๆœ‰ๅŠนใงใ™ใŒใ€ๅฝนใซ็ซ‹ใกใพใ›ใ‚“ใ€‚

ๅˆ—ๆŒ™ๅž‹ใฎ case ใฏใ€PHP ใฎใƒฉใƒ™ใƒซใจๅŒใ˜่ฆๅ‰‡ใซๅพ“ใ„ใพใ™ใ€‚ ๅฎšๆ•ฐ ใฎใƒšใƒผใ‚ธใ‚’ๅ‚็…งใใ ใ•ใ„ใ€‚

ใƒ‡ใƒ•ใ‚ฉใƒซใƒˆใงใฏใ€case ใฏๆœฌ่ณช็š„ใซใ‚นใ‚ซใƒฉใƒผใฎๅ€คใซไพๅญ˜ใ—ใฆใ„ใพใ›ใ‚“ใ€‚ ใคใพใ‚Šใ€Suit::Hearts ใฏ "0" ใซ็ญ‰ใ—ใใชใ„ใจใ„ใ†ใ“ใจใงใ™ใ€‚ ใ‚€ใ—ใ‚ใ€ใใ‚Œใžใ‚Œใฎ case ใฏใใฎๅๅ‰ใŒไป˜ใ„ใŸใ‚ทใƒณใ‚ฐใƒซใƒˆใƒณใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใงใ™ใ€‚ ไปฅไธ‹ใฎใ‚ณใƒผใƒ‰ใŒใใ‚Œใ‚’็คบใ—ใฆใ„ใพใ™:

<?php

$a
= Suit::Spades;
$b = Suit::Spades;

$a === $b; // true

$a instanceof Suit; // true
?>

ใ“ใฎใ“ใจใฏใ€ๅˆ—ๆŒ™ๅž‹ใฎๅ€คใฏๆฑบใ—ใฆ < ใ‚„ > ใงๆฏ”่ผƒใงใใชใ„ใ“ใจใ‚‚ๆ„ๅ‘ณใ—ใฆใ„ใพใ™ใ€‚ ใชใœใชใ‚‰ใ€ใใ‚Œใ‚‰ใฎๆฏ”่ผƒใ‚’ใ‚ชใƒ–ใ‚ธใ‚งใ‚ฏใƒˆใง่กŒใฃใฆใ‚‚็„กๆ„ๅ‘ณใ ใ‹ใ‚‰ใงใ™ใ€‚ ๅˆ—ๆŒ™ๅž‹ใฎๅ€คใ‚’ไฝฟใฃใฆใ“ใ‚Œใ‚‰ใฎๆฏ”่ผƒใ‚’่กŒใฃใฆใ‚‚ใ€ๅธธใซ false ใ‚’่ฟ”ใ—ใพใ™ใ€‚

้–ข้€ฃใ™ใ‚‹ใƒ‡ใƒผใ‚ฟใฎใชใ„ใ€ใ“ใ†ใ—ใŸใ‚ฟใ‚คใƒ—ใฎ case ใ‚’ใ€ "Pure Case" ใจๅ‘ผใณใพใ™ใ€‚ Pure Case ใฎใฟใ‚’ๅซใ‚€ๅˆ—ๆŒ™ๅž‹ใ‚’ใ€"Pure Enum" ใจๅ‘ผใณใพใ™ใ€‚

ๅ…จใฆใฎ Pure Case ใฏใ€ใใฎๅˆ—ๆŒ™ๅž‹ใฎใ‚คใƒณใ‚นใ‚ฟใƒณใ‚นใจใ—ใฆๅฎŸ่ฃ…ใ•ใ‚Œใฆใ„ใพใ™ใ€‚ ๅˆ—ๆŒ™ๅž‹ใฏๅ†…้ƒจ็š„ใซใ‚ฏใƒฉใ‚นใจใ—ใฆ่กจ็พใ•ใ‚Œใพใ™ใ€‚

ๅ…จใฆใฎ case ใฏ่ชญใฟๅ–ใ‚Šๅฐ‚็”จใฎใƒ—ใƒญใƒ‘ใƒ†ใ‚ฃ name ใ‚’ๆŒใกใพใ™ใ€‚ ใ“ใ‚Œใฏๅคงๆ–‡ๅญ—ๅฐๆ–‡ๅญ—ใŒๅŒบๅˆฅใ•ใ‚Œใ‚‹ใ€case ใใฎใ‚‚ใฎใฎๅๅ‰ใงใ™ใ€‚

<?php

print Suit::Spades->name;
// "Spades" ใจ่กจ็คบ
?>

ๅˆ—ๆŒ™ๅž‹ใฎๅๅ‰ใ‚’ๅ‹•็š„ใซๅ–ๅพ—ใ—ใฆใ„ใ‚‹ๅ ดๅˆใ€ case ใฎๅญ˜ๅœจใ‚’็ขบ่ชใ—ใŸใ‚Šใ€่ชญใฟๅ–ใ‚‹็”จ้€”ใจใ—ใฆ defined() ใ‚„ constant() ้–ขๆ•ฐใŒไฝฟใˆใพใ™ใ€‚ ใ—ใ‹ใ—ใชใŒใ‚‰ใ€ใ“ใ‚Œใ‚‰ใฎ้–ขๆ•ฐใฎๅˆฉ็”จใฏใŠใ™ใ™ใ‚ใงใใพใ›ใ‚“ใ€‚ ใชใœใชใ‚‰ใ€ Backed Enum ใงๅคงๅŠใฎ็”จ้€”ใ‚’ๆบ€ใŸใ›ใ‚‹ใฏใšใ ใ‹ใ‚‰ใงใ™ใ€‚

๏ผ‹add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top