1

クラスのインスタンスを作成したり、そのクラスで静的関数を使用したりするのではなく、そのクラスのグローバル シングルトンでメソッドを呼び出す既存のコードが多数あります。

例 (stringclass.php):

class String {
   function endsWith($str, $search) { 
      return substr($str, -strlen($search)) == $search;
   }
}
$STRING_OBJECT = new String();

次に、これを次のように使用します。

include_once("stringclass.php");
if ($STRING_OBJECT->endsWith("Something", "thing")) {
   echo "It's there\n";
}

これは関数を呼び出すあまり賢明な方法ではないことはわかっていますが、これらのシングルトンを使用するすべてのコードを変更することなく、オートローダーを使用して適切なクラスを含めるのを忘れているすべての場所を修正できるかどうか疑問に思っていました. . 宣言されていないグローバルの使用を検出し、参照されていたグローバルの名前に基づいて正しいクラス ファイルをインクルードします。

4

1 に答える 1

0

ArrayAccessインターフェースを使用できます

http://php.net/manual/en/class.arrayaccess.php

class Ztring implements arrayaccess
{
    private $container = array ();

    public function offsetSet ($offset, $value)
    {
        $this->container[$offset] = $value;
    }

    public function offsetGet ($offset)
    {
        // exception
        if ($offset == 'something')
        {
            return 'works!';
        }

        return $this->container[$offset];
    }

    public function offsetExists ($offset)
    {
        return isset($this->container[$offset]);
    }

    public function offsetUnset ($offset)
    {
        unset ($this->container[$offset]);
    }
}


$x = new Ztring ();

$x['zzz'] = 'whatever';
echo $x['zzz']."\n";

echo $x['something']."\n";
于 2013-02-06T12:48:52.973 に答える