2005-12-21

身体が動かねぇ

風邪と雪かきのダブルパンチで体力的に限界。

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";
?>

About

例によって個人のなんちゃらです