classを名前空間の分離のためだけに使う
休んでるんだけどこんな実験。
何をしているのかというと、例えば PukiWiki みたいにグローバルな関数と global 宣言しまくりなコードをどうにかいじりやすくするためにとりあえず class で分けて、class::func() で呼ぶようにして、必要なときだけ extends して関数を override したら少しは扱いやすくなるかなーということの確認。分かったことは、
- Perl の package とは違うので変数は使えない
- グローバルスコープだろうが class内だろうが、同じ関数を二重に定義することはできない
- extends して override することは通常通り可能
ほんとにただ :: を使って「関数の名前空間を分ける」だけに利用することは可能だってことですな。問題は global 宣言しまくりの変数の方か。
<?php
/**
* クラスを名前空間の分離だけに利用するテスト
*/
print "<pre>\n";
class Hoge {
function func() {
echo "function name divided func()\n";
}
}
function globalfunc() {
echo "function global scope globalfunc()\n";
}
Hoge::func();
globalfunc();
class Fuga extends Hoge {
function func() {
echo "Fuga::func()\n";
}
}
Fuga::func();
Hoge::func();
/*
// parse error
class First {
class Second {
function func() {
echo "Double class is available ?\n";
}
}
}
First::Second::func();
*/
/*
// Fatal Error: Cannot redeclare class Hoge
class Hoge {
function func() {
echo "Hoge::func()\n";
}
}
*/
print "</pre>\n";
?>