それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

PHPの可変変数のメタプログラミングをRubyでもやる

メタプログラミングやリフレクション楽しいです。

PHP で抽象化する。

<?php
class Lion extends Animail{ };
class Leopard extends Animail{ };
$name = "Lion";
$animals[] = new $animal();

とかけます。これはPHPの可変変数や変数展開を上手に使った例で、DBのテーブル名からクラスを動的に生成したりと便利に使います。
Javaだとちょっと大変ですよ。

rubyでメタプログラミング

同じ事をRubyでやるにはどうするか。rubyJavaの改良版*1なので、直接文字列をインスタンス化するPerlPHPの邪道を真似ることができないん。文字列を元に、クラスをインスタンス化するにはどうするか

rubyで文字列からクラス名を作るサンプル

class Lion < Animal
end
class Leopard < Animal
end

c_name = Object.const_get "Lion"
animals << c_name.new

これでとても便利になりますね

Factoryパターン

Factoryパターンもすぐに作れますね

def factory(str)
  return Object.const_get("#{str}Table").new
end
table = factory("Lion")

便利。


この点においてPHPは最強ですよね

*1:と個人的には思ってる