Top > Blog > 2010-02-07
Last-modified: Sun, 07 Feb 2010 22:09:44 JST

PHP 名前空間とクラス名

今日は自宅で仕事した。PHP5.3の新機能を使ってコーディング中。クロージャーが便利かも。

んで、is_a()関数が上手く動いてくれないなー、って調べていたら、ちょっと納得いかなかったので、メモ。

下のコードは"false"を返す。どうやら、常に「名前空間\クラスの名前」ってもので評価していて、評価時に名前空間が効いてくれないみたい(絶対指定とでもいうのか)。

<?php

namespace ns{

	class A {
	}

	echo is_a(new A, "A") ? "true" : "false";

}	

?>

仕様なんだろうけど、これは結構困る。なぜかって、class Aの定義を違う名前空間に持っていくと、そのクラス名を評価するところを、毎回書き換えなくちゃならなくなるから。


例を変えると、下のコードはどちらも、"ns\A"が帰ってくる。

<?php

namespace ns{

	class A {
	}

	echo get_class(new A), "\n";

}

namespace {

	echo get_class(new ns\A), "\n";

}

?>

うーん。名前空間への良い評価が一気に半減した感じ。さて、どうしたもんかな。

下のURLの内容を読ませてもらうと、
http://blog.asial.co.jp/583
最初に「¥」のある表記、つまり上の例だと「\ns\A」と書くと、class Aの絶対表記になるってことなので、相対運用させてくれてもいいと思うんだけどなぁ




コメント

適当に書いて頂いて構いません。スパム対策があるので、書き込めない場合があります。また、ボタンを押した後にしばらく時間がかかります。

新規コメント(ラジオボタンで親コメント選択可)
お名前

現在、コメントはありません