問題タブ [spl]
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 - RecursiveArrayIterator の使用中に配列のキーと値を変更するにはどうすればよいですか?
私はここで何かばかげたことをしていると思いますが、SPL の単純な問題のように見えるものに混乱しています。
RecursiveArrayIterator / RecursiveIteratorIteratorを使用して、配列の内容 (この例の値) を変更するにはどうすればよいですか?
次のテスト コードを使用すると、 getInnerIterator()とoffsetSet( )を使用してループ内で値を変更し、ループ内で変更された配列をダンプできます。
しかし、ループを離れて反復子から配列をダンプすると、元の値に戻ります。何が起こっていますか?
php - __オートロードが混同?
__autoloader()
私は多くの顧客がいるサーバーを持っています。開発するときに、たとえばファイルを含む関数がある init.php を含めdir_name(__FILE__)."/classes/".$className
ます。
しかし、昨日、サーバーが特定のクラスを見つけることができなかったことがわかりました.apacheで再起動すると、再び機能しました。
すべての顧客は、この独自の init.php を持っています... (したがって、同じサーバー上に多くの __autoloads があります)
私はいくつかのテストを行っていないので、問題を再現する前に誰かが私の質問に答えてくれることを願っていますが、同時に 2 つ以上のリクエストを受け取ったときに、php が間違ったオートロード機能を実行する可能性があると思いますか?
spl_autoload_register は解決策ですか?
いくつかのアイデアやブレインストーミングに感謝します。
php - PHP IteratorIteratorクラスはどのように機能しますか?
IteratorIteratorクラスが実際に行うことについて頭を悩ませることができないかもしれないので試してみてください。クラスはTraversableを実装できるので、エンジンはforeachを使用してループできることを認識し、IteratorIteratorはTraversableをIteratorに変換することになっていることを理解していますが、私はその方法を一生理解できません。
たとえば、PDOStatementクラスを取り上げます。PDOStatementでの反復を可能にするために、標準のIteratorメソッド(next、key、rewindなど)をどのように実装しますか?
質問が不明な場合は申し訳ありませんが、このクラスの正確な理由を把握するのに苦労しており、そのドキュメントは不足しています。
ありがとう、
意思
更新:phptファイルを調べてみると、IteratorIteratorを使用するテストが1つ見つかりました。
期待される出力は次のとおりです。
IteratorIteratorコンストラクトが$root->childを引数として取る方法と、子要素を反復処理する方法については、実際にはフォローしていません。
php - DirectoryIteratorを使用したファイルの並べ替え
lighttpd用のPHP5スクリプトを一覧表示するディレクトリを作成しています。特定のディレクトリに、直接のサブディレクトリとファイル(情報を含む)を一覧表示できるようにしたいと思います。
簡単に検索したところ、DirectoryIteratorは私の友達のようです。
しかし、ファイル名、日付、mime-typesなどでファイルを並べ替えることができるようにしたいと思います。
これを行う方法(ArrayObject / ArrayIteratorを使用しますか?)?
ありがとう
php - SplObjectStorage は String では機能しません。どうすればよいですか?
SplObjectStorage を使用して一連の固有のものを追跡することを提案した人がいます。文字列では機能しないことを除けば、素晴らしいです。「SplObjectStorage::attach() は、パラメーター 1 がオブジェクトであると想定しています。59 行目の fback.php で指定された文字列です」というエラーが表示されます。
何か案は?
php - SPLFileObject next()の動作
PHPでは、SPLFileObjectを使用すると、ファイルをイテレータとして扱うことができます。
しかし、私には理解できない行動があります。オブジェクトでnext()を呼び出すと、key()の値がインクリメントされますが、反復ごとにcurrent()を呼び出さない限り、ファイル内の行は進みません。SPLのドキュメントには、key()が現在の行番号を返すと記載されています。
再現するコード:
test.txt
iterator.php
私が見ることができることから、次はこのセクションで働いていません。私がこのようにそれを使うならば、それは前進するでしょう:
iterator_fix.php
これがバグなのか、それとも意図された動作なのか、誰か説明してもらえますか?
グーグルとPHPのフォーラムを見ましたが、何も起こりませんでした。前もって感謝します。
php - PHP array_key_exists() と SPL ArrayAccess インターフェイス: 互換性がありませんか?
配列をオブジェクトに格納できるように、単純なコレクション クラスを作成しました。
問題:このオブジェクトで array_key_exists() を呼び出すと、この関数が SPL によって処理されていないように見えるため、常に "false" が返されます。これを回避する方法はありますか?
コンセプトの証明:
php - SPLオートローダーで例外をスローしますか?
失敗した場合にPHPのSPLオートローダーから例外をスローする方法はありますか?PHP5.2.11では動作しないようです。
上記のコードが呼び出されても、例外の兆候はありません。代わりに、標準の「致命的なエラー:クラス'foobarDomain'がblaに見つかりません」が表示されます。そして、スクリプトの実行は終了します。
php - PHP の array_search でオブジェクトを検索可能にする
PHP ネイティブ メソッドで検索できるように、PHP でクラスを作成したいと考えていますarray_search
。現在、私のクラスは and を実装IteratorAggregate
しCountable
ているため、それを実行できますforeach
。
他にもいくつかの SPL インターフェース (SeekableIterator、ArrayAccess など) があり、おそらく適合すると思われますが、誰かが既にこれを行っているかどうか、どのインターフェースが私がやりたいことに適しているかを知りたいです。
ありがとうございました