PHP6.0.0-devを試してみる - import再訪
importキーワードはuseキーワードに変更されました。PHP6でもこのままの仕様となりそうです。
ここにある新規機能は、PHP5.3.0から利用可能になる予定です。
次期メジャーバージョンであるPHP6をあれこれやってみます。今回はPHP6.0.0-devを試してみる - 名前空間のサポートでも若干触れたキーワードimportについての補足です。
なお、今後正式リリースまでの間に仕様が変わり、ここにある内容が正しくなくなる可能性もありますので、注意してください。
使用した環境
今回の環境は、CentOS4.5+Apache2.2.4+PHP6.0.0-devです。ソースは2007/08/25に本家CVSリポジトリから直接取得したものです。build手順は『Do You PHP? - anonymous cvsからPHPのソースを取得する』を参照してください。また、PHPは以下のようなconfigureオプションを付けてbuildしています。
●PHP6.0.0-devのconfigureオプション--with-apxs2=/usr/local/apache2/bin/apxs \
--prefix=/usr/local/lib/php6 \
--with-pear=/usr/local/lib/php6/pear \
--with-config-file-path=/usr/local/lib/php6/ini/ \
--with-config-file-scan-dir=/usr/local/lib/php6/ini.d \
--enable-zend-multibyte \
--with-dom \
--enable-filter=shared \
--with-gettext=shared \
--with-mcrypt=shared \
--with-gd=shared \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-ttf \
--with-freetype-dir \
--enable-gd-native-ttf \
--enable-gd-jis-conv \
--enable-soap=shared \
--enable-pdo=shared \
--with-pdo-sqlite=shared \
--with-sqlite=shared \
--enable-sqlite-utf8 \
--with-openssl=shared \
--with-curl=shared \
--enable-bcmath=shared \
--enable-pcntl=shared \
--enable-sockets=shared \
--with-oci8=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/ \
--with-pdo-oci=shared,/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/ \
--with-pdo=shared \
--enable-sigchild \
--with-xsl=shared \
--enable-zip=shared
いずれも「--prefix」オプションを付けているため、phpコマンドのパスがデフォルトとは変わっていますが適宜読み替えてください。
デフォルトの名前空間を付ける
名前空間「php6::sample::ns」が定義されている場合、「::php6::sample::ns」のように先頭にデフォルトの名前空間を付けてもOKです。
<?php
namespace php6::sample::namespace01;
class ClassA {
private $param;
public function get() {
return $this->param;
}
public function set($param) {
$this->param = $param;
}
}
$obj = new php6::sample::namespace01::ClassA();
echo get_class($obj) . '<br>';
$obj = new ::php6::sample::namespace01::ClassA();
echo get_class($obj) . '<br>';
import文を実行するタイミング
import文は任意のタイミングで実行することができるようです。
<?php
namespace php6::sample::namespace02;
class ClassA {
private $param;
public function get() {
return $this->param;
}
public function set($param) {
$this->param = $param;
}
}
$obj = new php6::sample::namespace02::ClassA();
echo get_class($obj) . '<br>';
$obj = new ::php6::sample::namespace02::ClassA();
echo get_class($obj) . '<br>';
import php6::sample::namespace02;
$obj = new php6::sample::namespace02::ClassA();
echo get_class($obj) . '<br>';
$obj = new ::php6::sample::namespace02::ClassA();
echo get_class($obj) . '<br>';
$obj = new namespace02::ClassA();
echo get_class($obj) . '<br>';
import php6::sample::namespace02 as n02;
$obj = new php6::sample::namespace02::ClassA();
echo get_class($obj) . '<br>';
$obj = new ::php6::sample::namespace02::ClassA();
echo get_class($obj) . '<br>';
$obj = new namespace02::ClassA();
echo get_class($obj) . '<br>';
$obj = new n02::ClassA();
echo get_class($obj) . '<br>';
名前空間の任意の範囲に別名を付ける
名前空間の別名は、任意の範囲(表現が微妙。。。)に対して付けられるようです。
<?php
namespace php6::sample::namespace03;
class ClassA {
private $param;
public function get() {
return $this->param;
}
public function set($param) {
$this->param = $param;
}
}
import php6::sample as another_ns;
$obj = new another_ns::namespace03::ClassA();
echo get_class($obj) . '<br>';
まとめ
今回はちょっと軽めなネタでしたが、いかがだったでしょうか。こう見てみると、PHP6ではimportの使い方がカギになってきそうな感じですね。
|