質問

持ってき方など、さすがだなと私書くことができるPHPのクラスのように動作する配列を利用し通常の配列の構文を取得&設定あり。

例えばFooがあるPHPのクラスの作成):

$foo = new Foo();

$foo['fooKey'] = 'foo value';

echo $foo['fooKey'];

知っているPHPの_getと_set魔法がないようご使用の配列表記にアクセス。Pythonの取り扱いによる過負荷__getitem__、__setitem__.

する方法はあるのでしこPHP?った場合には違い走行PHP5.2.

役に立ちましたか?

解決

を伸ばす ArrayObjectArrayAccess しきいと考えている。

他のヒント

Swsホルテンは完成後も内部鋳造での結果通常のPHPの配列--などの機能をごArrayObject由来のクラスでした。チェックアウト:

class CaseInsensitiveArray extends ArrayObject {
    public function __construct($input = array(), $flags = 0, $iterator_class =     'ArrayIterator') {
        if (isset($input) && is_array($input)) {
            $tmpargs = func_get_args();
            $tmpargs[0] = array_change_key_case($tmpargs[0], CASE_LOWER);
            return call_user_func_array(array('parent', __FUNCTION__), $tmp    args);
        }
        return call_user_func_array(array('parent', __FUNCTION__), func_get_args());
    }

    public function offsetExists($index) {
        if (is_string($index)) return parent::offsetExists(strtolower($index));
        return parent::offsetExists($index);
    }

    public function offsetGet($index) {
        if (is_string($index)) return parent::offsetGet(strtolower($index));
        return parent::offsetGet($index);
    }

    public function offsetSet($index, $value) {
        if (is_string($index)) return parent::offsetSet(strtolower($index, $value));
        return parent::offsetSet($index, $value);
    }

    public function offsetUnset($index) {
        if (is_string($index)) return parent::offsetUnset(strtolower($index));
        return parent::offsetUnset($index);
    }
}

$blah = new CaseInsensitiveArray(array(
    'A'=>'hello',
    'bcD'=>'goodbye',
    'efg'=>'Aloha',
));

echo "is array: ".is_array($blah)."\n";

print_r($blah);
print_r(array_keys($blah));

echo $blah['a']."\n";
echo $blah['BCD']."\n";
echo $blah['eFg']."\n";
echo $blah['A']."\n";

は、期待どおりにarray_keys()を呼び出しは失敗します。また、is_array($blah)はfalseを返します。が変更された場合、コンストラクタライン:

$blah = (array)new CaseInsensitiveArray(array(

そのまま通常のPHPの配列(is_array($blah)がtrueを返すと、array_keys($blah)の作品が、すべての高機能で高い開発生産性をArrayObject由来のサブクラスはいくつかは失われてしまった(この場合は、大文字と小文字を区別しないキーをしなくなってしまいます。みに上記のコードの両方に面していますしたいとおもいます

PHPはどちらかをネイティブ配列のキーの大文字と小文字を区別し、ArrayObjectするキャスタブルに配列などの機能をサブクラスを実装し、すべての配列の機能を受け入れArrayObjectう場合がございます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top