問題タブ [arrayaccess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
474 参照

php - オブジェクトを反復処理するときの PHP 5.1.6 ArrayAccess エラー

PHP 5.1.6 でサイトを開発する必要があり、サイトで 5.2 以降では発生しないバグに遭遇しました。foreach() を使用してオブジェクトを反復処理すると、次のエラーが発生します。

この問題を回避する方法を知っている人はいますか?

0 投票する
1 に答える
219 参照

php - ArrayAccess ウォークスルーと質問

ArrayAccessPHPでの実装の実装についていくつか質問があります。

サンプルコードは次のとおりです。

質問:

  1. ArrayAccessPHP エンジンが実装された継承された関数を自動的に認識して呼び出すのは特別なインターフェイスであると想定しているため、実装する必要がある理由を尋ねていませんか?
  2. 実装された関数を public と宣言するのはなぜですか? 自動的に呼び出される特別な関数だと思います。$obj["two"]関数は外部から呼び出されないと言って呼び出すので、それらはプライベートである必要はありません。
  3. __constructor塗りつぶされた配列を関数に割り当てる特別な理由はありますか? これは私が知っているコンストラクター関数ですが、この場合、どのような助けになるのでしょうか。
  4. ArrayAccessとはどう違いArrayObjectますか?ArrayAccessを継承して実装したクラスは反復をサポートしていないと思いますか?
  5. を実装せずにオブジェクトのインデックス作成を実装するにはどうすればよいArrayAccessでしょうか?

ありがとう...

0 投票する
3 に答える
1210 参照

php - PHP 5.4 の簡略化された文字列オフセットの読み取り

ご存知の方も多いと思いますが、PHP 5.4 alpha がリリースされました。下記について質問があります。

簡素化された文字列オフセットの読み取り。 $str[1][0]は現在、法的な構造になっています。

正確にはどのように機能し$str[1][0]ますか?

編集: http://php.net/releases/NEWS_5_4_0_alpha1.txt

0 投票する
1 に答える
1602 参照

python - TypeError:「関数」オブジェクトはPythonで添字できませんか?

次のようなグラフをプロットするためのカラーコードを含む文字列オブジェクトの配列があります。colors = ["ob-", "or-", "oy-", "og-", "om-", "op-"]

for ループ (インデックスが配列の長さよりも小さい) でアクセスしようとすると、次のエラー メッセージが表示されます: TypeError: 'function' object is unsubscriptable

アクセスコードは次のようになります。

以前に色を印刷しましたが、すべて問題ないようです。以前の投稿でこれを確認しようとしましたが、適切な解決策が見つかりませんでした。

では、これに対する問題または解決策は何でしょうか?

よろしくお願いします。

0 投票する
2 に答える
2218 参照

php - PHP の ArrayAccess -- 参照によるオフセットへの代入

まず、 の ole' マニュアルからの引用ArrayAccess::offsetSet():

この関数は、参照による割り当てでは呼び出されず、ArrayAccessでオーバーロードされた配列次元への間接的な変更(次元を直接変更するのではなく、サブ次元またはサブプロパティを変更するか、配列次元を割り当てることによって行われるという意味で間接的)別の変数への参照によって)。代わりに、ArrayAccess::offsetGet()が呼び出されます。そのメソッドが参照によって返される場合にのみ操作が成功します。これは PHP 5.3.4 以降でのみ可能です。

私はこれに少し混乱しています。これは、( 5.3.4 の時点でoffsetGet())実装クラスで参照によって返すように定義できることを示唆しているようです。したがって、参照による割り当てを処理します。

だから、今テストスニペット:

(検証とisset()チェックがないことは無視してください)

わかりました、それはうまくいきません。では、このマニュアル ノートは何を指しているのでしょうか。

理由スニペットの例が示すように
、配列演算子を介して を実装するオブジェクトへの参照による割り当てを許可したい。ArrayAccess私はこれを以前に調査したことがあり、それが可能だとは思いませんでしたが、不確実性のためにこれに戻ってきて、マニュアルでこの言及を(再)発見しました。今、私はただ混乱しています。


更新: をヒットしとき、Post Your Questionこれは. その場合は、お詫び申し上げます。ただし、可能であれば、オーバーロードされたオブジェクトへの参照によって割り当てる方法を知っていると便利です。$bar = &$test['foo'];


さらに詳しく: 結局のところ、次のメソッドエイリアスが必要です。

hasgetset、およびremove行く限り、サポートされている のメソッドに問題はありませんArrayAccess。バインド機能は私が途方に暮れている場所であり、ArrayAccess と PHP の制限がこれを単に禁止していることを受け入れ始めています。

0 投票する
1 に答える
2749 参照

php - Arrayaccess とネイティブ php 配列関数

array_merge(), array_pop(), .. 関数を使用して ArrayAccess を操作する方法はありますか?

今以来、私はIterateインターフェースと__set_state()魔法の方法を試しましたが、成功しませんでした。

表示されるエラー: array_replace_recursive() [<a href='function.array-replace-recursive'>function.array-replace-recursive</a>]: Argument #1 is not an array

レコード、gettype()リターンobjectis_array()リターンだけfalseで、私はphpバージョン5.3.8を使用しています

0 投票する
1 に答える
1623 参照

php - Arrayaccess、Iterator、および current()

Countable、ArrayAccess、Iterator、および Serializable を実装するクラスがあります。配列形式のパブリック変数 $data があります。そして私の反復実装:

すべてがforeachループで機能しますが、手動で呼び出すとcurrent($arrayObject)、現在の配列ではなく、配列全体が返さ$dataれます。できますがcurrent($arrayObject->data)、できる限りネイティブ配列機能を維持したいと考えています。

これはphpの動作ですよね?(私のコードのバグではありません)そして、カスタム関数(指が交差していない)なしで、これに回避策はありますか?

[編集] 完全なクラスの簡略化されたバージョン(作業中):

0 投票する
1 に答える
1619 参照

php - SplObjectStorageをデータマップとして使用して、可変配列をデータとして使用できますか?

次のコードでは:

私はそうなることを期待$storage[$fooA]します1、それはそうです。私もそうなることを期待$storage[$fooB]しますがarray('test')、そうではありません。これにより、「SplObjectStorageのオーバーロードされた要素の間接的な変更は...に影響を与えません」という通知もトリガーされます。

ArrayAccessこれは、 inの実装がSplObjectStorage参照によって値を返さないために発生すると思います。

SplObjectStorageキーがオブジェクトで値が可変配列であるデータマップとして使用する方法はありますか?この種の作業を行うための他の実行可能なオプションはありますか?

0 投票する
3 に答える
6852 参照

php - array_valuesはArrayAccessオブジェクトでは機能しません

array_values()ArrayAccessオブジェクトでは機能しません。どちらもしませんarray_keys()

なぜ?

アクセスできれば、$object['key']あらゆる種類の配列操作を実行できるはずです。

0 投票する
2 に答える
5672 参照

php - ArrayAccess と Iterator を実装するオブジェクトに対して foreach を使用する

ArrayAccess および Iterator インターフェイスを実装するオブジェクトのキーを反復処理する方法はありますか? 配列アクセスは魅力的ですが、それらのオブジェクトに対して foreach を使用することはできません。出来ますか?私はこれまでにそのようなコードを持っています:

助けとヒントをありがとう。