問題タブ [splobjectstorage]
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 - SplObjectStorageをデータマップとして使用して、可変配列をデータとして使用できますか?
次のコードでは:
私はそうなることを期待$storage[$fooA]
します1
、それはそうです。私もそうなることを期待$storage[$fooB]
しますがarray('test')
、そうではありません。これにより、「SplObjectStorageのオーバーロードされた要素の間接的な変更は...に影響を与えません」という通知もトリガーされます。
ArrayAccess
これは、 inの実装がSplObjectStorage
参照によって値を返さないために発生すると思います。
SplObjectStorage
キーがオブジェクトで値が可変配列であるデータマップとして使用する方法はありますか?この種の作業を行うための他の実行可能なオプションはありますか?
php - SplObjectStorage::containsとSplObjectStorage::offsetExistsの違いは何ですか?
PHPのドキュメントはあまり明確ではなく、次のように述べているだけです。
SplObjectStorage::offsetExists オブジェクトがストレージに存在するかどうかを確認します。(PHP> = 5.3.0)
SplObjectStorage::contains ストレージに提供されたオブジェクトが含まれているかどうかを確認します。(PHP> = 5.1.0)
これは私にはほとんど同じように思えます。
質問: offsetExistsが5.3.0でのみ利用可能であることを除けば、2つの違いは何ですか?
私が行った小さなテスト...
出力:
php - PHP SplObjectStorageをアタッチして、リストの一番上にプッシュします
少し状況があります。SplObjectStorageオブジェクトを使用していて、ある時点でアイテムをアタッチする必要がありますが、リストの一番上にプッシュする必要があるため、アイテムを反復処理すると、最初のオブジェクトとして取得されます。
すなわち
php - メソッド宣言は互換性がありますが、PHP は文句を言います
だから私はこのクラスを持っています:
これは SplObjectStorage です。
http://php.net/manual/en/class.splobjectstorage.php
ご覧のとおり、これらは同一ですが、JSObjectSTorage をインスタンス化すると、次のエラーが発生します。
厳格な基準: MOWAFW\Core\Type\JavaScript\JSObjectStorage::addAll() の宣言は、/Users/ ** /JSObjectStorage.php の 175 行の SplObjectStorage::addAll() の宣言と互換性がある必要があります
そして、これは removeAll() と removeAllExcept() に起こります。
何か案は?!
私は使用しています:
php - SplObjectStorage はインスタンスによってのみマップされます
私の問題は、一意のインスタンスではなく、オブジェクトの等価性 (==) でマップしたいことです。つまり、これをリファクタリングして、エラーをスローせずにマップされた値を返すようにします。
編集: また、SplObjectStorage オブジェクトのキーを反復処理して等価にする必要がある場合は、代わりに、オブジェクト/配列をハッシュし、ハッシュにマップするだけの良い方法を知りたいと思います。
php - session_start() php での UnexpectedValueException が SPLObjectStorage シリアライゼーションに失敗する
UnexpectedValueException
が投入されるのはなぜsession_start()
ですか?
のプロパティを持つオブジェクトがありますSPLObjectstorage
。そのオブジェクトは次のようなセッションに割り当てられます
内部セッションのシリアル化に直面している問題をデコードすると思われます。セッションをデータベースに保存すると、シリアル化しているように見えますが、objectStorage
デコードできません。
サンプル セッション データ
Rolestorage
上記の文字列の拡張もアイデアSPLObjectstorage
session_decode()
を返しますか?false
属性を削除すると、roleList
適切にシリアル化されます。
別々にしたら
シリアルstring 'C:11:"RoleStorage":22:{x:i:1;N;,r:3;;m:a:0:{}}' (length=46)
化解除中に同じメッセージが表示されて失敗します。なぜこれが起こっているのかわかりません。
注: オブジェクトをRoleStorage
にアタッチする際に、オブジェクト自体をデータとして使用しました。参照として保存されていることを意味します。serialize()
(if) がこれを内部的に処理する方法がわかりません。
php - splobjectstorage 内のデータの検索
ここ数日、私は websockets と、Ratchet と呼ばれる PHP ライブラリ (PHP で websockets サーバー アプリケーションを作成するのに理想的です) について調べてきました。Ratchet の公式ドキュメントでは、クライアント接続オブジェクトの管理に SplObjectStorage (私は聞いたことがありません) を使用することを推奨しています。
ほとんどのサーバーアプリケーションでは、おそらく各クライアントに関するデータを保持する必要があります(たとえば、単純なメッセージングサーバーの作成を実験している私の場合、クライアントのニックネームなどのデータを保持する必要があります)ので、私が理解しているように以下のように、新しい接続が開かれたときに、クライアント オブジェクトとクライアント データを含む配列を SplObjectStorage に追加できます。
ただし、データ配列の値 (ユーザーのニックネームなど) によって SplObjectStorage からオブジェクトを取得する最良の方法が何であるかはわかりません。1 つの方法は次のようになります。
しかし、これを行うためのより良い方法があると思うので、アドバイスをいただければ幸いです。
前もって感謝します。
php - PHP で大量の文字列セットを SplObjectStorage にプッシュする方法と、文字列が存在する場合はプッシュしない
基本的に必要なのは、大量の文字列セットを SplObjectStorage にプッシュし、各文字列が存在しない場合は何らかのアクションを実行し、存在する場合は他のアクションを実行することです。
オブジェクトで 22222 しか取得できないか、オブジェクトが上書きされます。私は両方を取得する必要があります, そしてそれらがそれらの1つだけに一致する場合. 文字列の個別の値を取得する必要があります
php - PHP SplObjectStorage クラス内で作成できません
SplObjectStorage
クラス内でマップとして保護されたものを初期化することは可能でしょうか? これを試すたびにエラーが発生しているようです。以下の例のように:
php - SplObjectStorage のカスタム反復
最初にデータ (情報) でソートするなど、SPLObjectStorage オブジェクトを反復処理する方法を変更したいと考えています。
したがって、ループでは、数値的に a から z に移動します (sort() 関数を使用)。
しかし、SPLObjectStorage では、配列へのアクセスはありませんよね?
オブジェクトの配列にアクセスできないので、それを行うことは可能ですか??