どうやらstaticメソッドは継承先クラスでオーバーライドもしくは実装されたメソッドを認識できず、親クラスか自分のクラス内部に「直接」書かれたメソッドのみ認識可能と言う話。
今回のように、継承先のstaticメソッドから取得した値を使って戻り値を生成するstaticメソッドを実装する場合、
<?php class stReservedNopay implements mailOrderState { public static getLargeStateCode() { return self::STATE_RESERVED; } public static getMiddleStateCode() { return self::STATE_RESERVED_NOPAY; } public static getStateSerialKey() { return self::getLargeState() * 1000 + self::getMiddleState(); } } class stArraival implements mailOrderState { public static getLargeStateCode() { return self::STATE_ARRIVAL; } public static getMiddleStateCode() { return self::STATE_ARRIVAL_INBOX; } public static getStateSerialKey() { return self::getLargeState() * 1000 + self::getMiddleState(); } } class stDisplayOutercase implements mailOrderState { public static getLargeStateCode() { return self::STATE_DISPLAY; } public static getMiddleStateCode() { return self::STATE_ARRIVAL_OPENBOX; } public static getStateSerialKey() { return self::getLargeState() * 1000 + self::getMiddleState(); } }
が正解??