問題タブ [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.
php - オブジェクトを反復処理するときの PHP 5.1.6 ArrayAccess エラー
PHP 5.1.6 でサイトを開発する必要があり、サイトで 5.2 以降では発生しないバグに遭遇しました。foreach() を使用してオブジェクトを反復処理すると、次のエラーが発生します。
この問題を回避する方法を知っている人はいますか?
php - ArrayAccess ウォークスルーと質問
ArrayAccess
PHPでの実装の実装についていくつか質問があります。
サンプルコードは次のとおりです。
質問:
ArrayAccess
PHP エンジンが実装された継承された関数を自動的に認識して呼び出すのは特別なインターフェイスであると想定しているため、実装する必要がある理由を尋ねていませんか?- 実装された関数を public と宣言するのはなぜですか? 自動的に呼び出される特別な関数だと思います。
$obj["two"]
関数は外部から呼び出されないと言って呼び出すので、それらはプライベートである必要はありません。 __constructor
塗りつぶされた配列を関数に割り当てる特別な理由はありますか? これは私が知っているコンストラクター関数ですが、この場合、どのような助けになるのでしょうか。ArrayAccess
とはどう違いArrayObject
ますか?ArrayAccess
を継承して実装したクラスは反復をサポートしていないと思いますか?- を実装せずにオブジェクトのインデックス作成を実装するにはどうすればよい
ArrayAccess
でしょうか?
ありがとう...
php - PHP 5.4 の簡略化された文字列オフセットの読み取り
ご存知の方も多いと思いますが、PHP 5.4 alpha がリリースされました。下記について質問があります。
簡素化された文字列オフセットの読み取り。
$str[1][0]
は現在、法的な構造になっています。
正確にはどのように機能し$str[1][0]
ますか?
python - TypeError:「関数」オブジェクトはPythonで添字できませんか?
次のようなグラフをプロットするためのカラーコードを含む文字列オブジェクトの配列があります。colors = ["ob-", "or-", "oy-", "og-", "om-", "op-"]
for ループ (インデックスが配列の長さよりも小さい) でアクセスしようとすると、次のエラー メッセージが表示されます: TypeError: 'function' object is unsubscriptable
アクセスコードは次のようになります。
以前に色を印刷しましたが、すべて問題ないようです。以前の投稿でこれを確認しようとしましたが、適切な解決策が見つかりませんでした。
では、これに対する問題または解決策は何でしょうか?
よろしくお願いします。
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'];
さらに詳しく: 結局のところ、次のメソッドエイリアスが必要です。
has
、get
、set
、およびremove
行く限り、サポートされている のメソッドに問題はありませんArrayAccess
。バインド機能は私が途方に暮れている場所であり、ArrayAccess と PHP の制限がこれを単に禁止していることを受け入れ始めています。
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()
リターンobject
、is_array()
リターンだけfalse
で、私はphpバージョン5.3.8を使用しています
php - Arrayaccess、Iterator、および current()
Countable、ArrayAccess、Iterator、および Serializable を実装するクラスがあります。配列形式のパブリック変数 $data があります。そして私の反復実装:
すべてがforeachループで機能しますが、手動で呼び出すとcurrent($arrayObject)
、現在の配列ではなく、配列全体が返さ$data
れます。できますがcurrent($arrayObject->data)
、できる限りネイティブ配列機能を維持したいと考えています。
これはphpの動作ですよね?(私のコードのバグではありません)そして、カスタム関数(指が交差していない)なしで、これに回避策はありますか?
[編集] 完全なクラスの簡略化されたバージョン(作業中):
php - SplObjectStorageをデータマップとして使用して、可変配列をデータとして使用できますか?
次のコードでは:
私はそうなることを期待$storage[$fooA]
します1
、それはそうです。私もそうなることを期待$storage[$fooB]
しますがarray('test')
、そうではありません。これにより、「SplObjectStorageのオーバーロードされた要素の間接的な変更は...に影響を与えません」という通知もトリガーされます。
ArrayAccess
これは、 inの実装がSplObjectStorage
参照によって値を返さないために発生すると思います。
SplObjectStorage
キーがオブジェクトで値が可変配列であるデータマップとして使用する方法はありますか?この種の作業を行うための他の実行可能なオプションはありますか?
php - array_valuesはArrayAccessオブジェクトでは機能しません
array_values()
ArrayAccessオブジェクトでは機能しません。どちらもしませんarray_keys()
なぜ?
アクセスできれば、$object['key']
あらゆる種類の配列操作を実行できるはずです。
php - ArrayAccess と Iterator を実装するオブジェクトに対して foreach を使用する
ArrayAccess および Iterator インターフェイスを実装するオブジェクトのキーを反復処理する方法はありますか? 配列アクセスは魅力的ですが、それらのオブジェクトに対して foreach を使用することはできません。出来ますか?私はこれまでにそのようなコードを持っています:
助けとヒントをありがとう。