Do You PHP はてブロ

Do You PHPはてなからはてブロに移動しました

__getStaticメソッド

パッチは作成されているけどリポジトリにはcommitされてない状態」みたいですが、__getStatic/__setStatic/__issetStatic/__unsetStaticの各メソッドが追加されるかも知れません。まあ、PHP6からかも知れませんが。
で、以前やったtypesafeな定数って、__getStaticならもっと良い感じになりそうです。以下動作しませんが、「こんな感じで」というコードです。

<?php
class Card
{
    private $name;
    private function __construct($name)
    {
       $this->name = $name;
    }
    public static function __getStatic($name)
    {
        static $objects = null;
        if (is_null($objects)) {
            echo "create\n";
            $objects = array();
            $objects['CLUBS'] = new Card('clubs');
            $objects['DIAMONDS'] = new Card('diamonds');
            $objects['HEARTS'] = new Card('hearts');
            $objects['SPADES'] = new Card('spades');
        }
        if (isset($objects[$name])) {
            return $objects[$name];
        }
        throw new RuntimeException('value not exist');
    }
    public function __toString()
    {
        return $this->name;
    }
}

// 'clubs'と表示される
var_dump(Card::CLUBS);