2012-08-07 24 views
11

PHPのSplFileObjectではなくfopenの賛否両論は何ですか?PHPのSplFileObjectとfopenの比較

SplFileObjectは、エラーハンドリングにtry...catchを使用すると便利です。それとは別に、他に何かを推薦する他の理由はありますか?

(ボーナス:それはSplFileObjectと呼ばれているのはなぜためSplスタンドを何なぜ単にFileObject???)

更新:SplFileObjectの1つの制限は、それが(まだ)ないcloseメンバーを持っているということです関数。シナリオによっては、これが問題になることがあります(例:Unlink and SplFileObject)。

+2

ここでは[spl]タグを使用します。それに続く少数の人々は通常非常に熱心で知識があります。 – goat

+0

@rambocoder完了 –

答えて

1

Splは、Phpの標準ライブラリであり、すばらしいものです。

SplFileObjectを使用する良い理由の1つは、オブジェクト指向のコードを作成することです。必要に応じて、独自のコードベースでクラスを拡張し、ファイルを使用している間に素敵な作業をすることができます。

4

標準のPHPライブラリの略です。

主な利点はオブジェクトの向きです。これは、すべてのものではなく、いくつかのアプローチに適しています。 SplFileObjectから継承できるように(カスタム形式などで)ファイルを処理するためのクラスを用意し、基本機能を既に組み込んでいる場合は、良いオプションです。

ここでの主な質問は、あなたのコードで達成するには - 1つのファイルを一度開いてデータを読み込んでから作業するか、1つ(またはそれ以上)のファイルでさらに複雑な作業をする必要がありますか?

+0

私のプロジェクトでこの1ページがあり、CSVファイルを読み込んでデータベースを作成します。私はエラー処理のためにすべてのページで 'try ... catch'を使用しています。私は 'SplFileObject'が良い選択だと思っていますか? –

+2

私は個人的にはデータベースに入れたいデータを好みます。エラー処理を細かくすることができるので、エラーをログに記録したいので、この一般的な設定で自分自身を実行します。あなたがファイル入力(壊れていない、自動化されたソースなどから)について確信が持てるならば、おそらく 'fgetscsv' – Florian

14

SPLは、標準PHPライブラリの略です。

SplFileObjectは、fopenで作成されたストリームリソースを内部的に使用します。だからあなたの質問はSplFileObjectを使うのが面白いのか、ストリームリソースを使って直接作業するのでしょうか?

SplFileObjectプロ:

  • SplFileObject操作を提出するOOPアプローチを提供する(freadはPHP 5.5.11に加え、fputcsvは、PHP 5.4で追加されました)。

  • SplFileObjectは、他のSPL Iteratorを使用してファイルをよりうまく操作できるように、いくつかの便利なPHPインターフェイスを実装しています。

SplFileObject主な欠点は、それがその 内部ストリームリソースへのアクセス権を与えないということです。 PHP関数はもともとストリームリソースを直接操作するために構築されたものです。

  • php stream filters使用量がSplFileObjectと悪い:SplFileObjectは独自の内部ストリームリソースへのアクセス権を与えないという事実は、機能に建てられた多くのPHPでそれが使用できなくなります。php://filterメタラッパーに依存する必要があり、そのためにその有用性が制限されています。 cURLSplFileObjectを使用して

は交換できませんSplFileObjectとストリームリソースを、それを要約することはできません。 SplFileObjectを使って行われたことは、ストリームリソースとSplFileObjectユーザランドの実装を使用して達成できましたが、逆は真ではありません

したがって、fopenで作成されたストリームリソースを使用する場合は、SplFileObjectに頼るよりも良い選択肢になります。

closeメソッドの場合は、内部ストリームリソースを解放/閉じるには、ハンドラをnullに設定するだけで済みます。

$file = new SplFileObject('/path/to/my/file'); //the file handler is created 
$file = null; //the file handler is closed