Hatena::ブログ(Diary)

モバイル系ニートエンジニア`chobi_e`の日記 Twitter

2010-12-01

Symfony Advent 2010開催しています!

さて、いきあたりばったりではありますが








始まりました、Symfony Advent 2010







もといクリスマスまでの、しんふぉにゃん達の集い 2010







熱き 思いを 語り合う




しんふぉにゃん多数!








24日までガッツリと皆で盛り上げて行きましょう!







改めましてSymfony Advent 2010の簡単な紹介をさせていただきますと


AdventCalendarは西欧のイベントの一つで聖誕祭までの4週間を待ちわびるために1日ごとに小さな窓の付いたカレンダーを開けていくイベントです。24日分の窓を開けると素敵な絵が出てきたりして子供心に楽しいなと思ったりしていました。




転じて技術界隈では12月1日から24日まで技術的なtipsを書いて行こうというイベントとなり、今回のSymfony Advent 2010では有志を募ってsymfonyやSymfony2のイイ所を持ち回りで記事にしようぜ!という事で集まりつつ記事を書いたり色々なやりとりを行なっています(現在も絶賛メンバー募集中です。)


はじめましてのSymfony2 Component


Symfony2、Doctrine2とライブラリが多くちょっと使ってみるという場合に敷居が高く感じられてしまうのではないでしょうか?


そこで、手始めにSymfony2に親しんでみよう、ということで私のオススメはUniversalClassLoaderです。



PHP5になって数年、最近ではspl_autoload_registerのラッパーがかなり巷で使われるようになってきましたね。個人的に色々と触ってきて一番使い安いなぁと思っているのがSymfony2のUniversalClassLoaderです。


UniversalClassLoaderでは今までのスタイルのライブラリの自動読み込みとNamespaceに対応した自動読み込み機能に対応している便利なクラスです。


それでは実際に使ってみましょう。まずはお決まりのSymfony2のダウンロードからです。

  mkdir advent_first_day
  cd advent_first_day
  git clone https://github.com/symfony/symfony.git

別途Symfony2のサンドボックスがhttp://symfony-reloaded.org/downloads/sandbox_2_0_PR3.zipにありますので

そちらからダウンロードして解凍、sandbox/src/vendor/symfonyディレクトリを適当な場所に置いてもOKです。


それでは、Autoloaderを登録するコードを書いてみましょう。

autoloader.php

  <?php
  require __DIR__ .'/symfony/src/Symfony/Component/HttpFoundation/UniversalClassLoader.php';

  $loader = new \Symfony\Component\HttpFoundation\UniversalClassLoader();
  $loader->registerNamespaces(array(
      'Text\\Restructured' => "vendor/text-restructured/src",
      //...Namespace => ディレクトリという形で登録していきます。
  ));
  $loader->registerPrefixes(array(
      'Net' => "./lib",
      //...ライブラリのPrefix => ディレクトリという形で登録していきます。
  ));

  //register()を呼ぶことでautoloaderが有効になります。
  $loader->register();

Namespaceの登録はregisterNamespacesメソッド,今までのPEARスタイルのライブラリであればregisterPrefixesメソッドを使うことで自動読み込みの設定が簡単に行なえます。


UniversalClassloaderのメソッド一覧

  • registerNamespace($namespace, $path)

単一のNamespaceを登録する。

  • registerNamespaces(array $namespaces)

namespace => path形式の配列で複数のNamespaceを登録する

  • registerPrefix($prefix)

単一のPEAR形式のライブラリを登録する

  • registerPrefixes(array $prefixes)

PREFIX => path形式の配列で複数のPEAR形式のライブラリを登録する



UniversalClassLoaderは単一のファイルで完結しておりますので、PHP5.3以上が使える環境であれば

上記のようにUniversalClassLoader.phpを読み込んで使えばシンプルで、高速なautoloaderを使うことが出来ます。


autoloaderの実装ではライブラリ名を指定しない方法もありますが、UniversalClassloaderのように指定したほうがファイル名の解決が高速に行えるのでこのような実装を使うべきだと思います。

(混み入った話になってしまいますがファイル名解決をPHPに任せるとinclude_pathを舐めるのでIOのコストが結構かかります。)


因みに5.2系を使われている方は一番上にあるnamespace宣言を消しておいておけば使え うわーなにをするやめrせdfhjp




Symfony2は自分達のプロジェクトの便利ライブラリとしても使い始められますのでこの機会に試されてみてはどうでしょうか?



Symfony Advent 2010であなたの記事を公開してみませんか?


Symfony Advent 2010では12月1日から12月24日までを使って日替わりでsymfonyでイイなと思った小さなtipsから内部構造まで迫った解説などをブログ記事にして公開していくイベントです。


参加についてはATNDで参加表明の上、Google GroupのSymfony Advent 2010に追加リクエストを送信ください。


Symfony Advent 2010チーム一同、あなたの参加をお待ちしております。

日本Symfonyユーザー会

Symfony アドベントカレンダー2010

※Syfony Advent 2010はsymfony好きな有志で集まったチームです。