Replies: 1 comment 1 reply
-
ご指摘ありがとうございます! まず、前提としてphpにはEnumが言語レベルでは実装されておらず、2021年11月25日リリースのPHP8.1でついにEnumがリリースされます。 それに伴い、php版のEnumが導入された前提でご回答いたします。
結論としては比較メソッドは作らず等価演算子(===)の利用で良いと考えています。 今までは「Enum風」オブジェクトを自作していたため何をもって「等しい」とするかの定義がそれぞれのオブジェクトでバラバラでした。(Colorであればblackとwhiteの同一性判定に内部プロパティの$colorCodeを利用) // Enumでの実装
$color = Color::from('white');
$color === Color::white; // true
こちらのご指摘についてはphpの動的型付けの性質上、Enum型でありながらnullポインタを指すということは起こり得ないと考えています。(値にnullが設定されていれば有無を言わさずphp側でnull型として認識するため、ヌルポが出る前に型の不一致によるコンパイルエラーが発生します。) |
Beta Was this translation helpful? Give feedback.
-
Enum値の比較はインスタンスが持つ機能というよりは第三者が行うイメージなので、staticの方が良いのかなと思いました。
あと、インスタンスに比較の機能を持たせるとヌルポの原因にもなり兼ねないです。
(Color.equals(a, b)と書くことになるので、英文的に読めなくなってしまうのは難点)
othello/packages/Models/Board/Color/Color.php
Line 73 in 21201b2
Beta Was this translation helpful? Give feedback.
All reactions