正しい方向での設定をカスタムFileInfoクラスの繰り返し処理する反復子

StackOverflow https://stackoverflow.com/questions/2572707

  •  24-09-2019
  •  | 
  •  

質問

私のセカスタムクラスの繰り返し処理する反復子を通じて setInfoClass 方法:

このメソッドを使用設定カスタムクラスを使用した場合のgetFileInfoとgetPathInfoが呼び出されます。のクラス名を渡していくことが必要であるからSplFileInfo.

私のクラスは以下のようになっています(簡体字の例:

class MyFileInfo extends SplFileInfo
{
    public $props = array(
        'foo' => '1',
        'bar' => '2'
    );
}

反復子のコードです:

$rit = new RecursiveIteratorIterator(
           new RecursiveDirectoryIterator('/some/file/path/'),
           RecursiveIteratorIterator::SELF_FIRST);

以降 RecursiveDirectoryIterator が継承を通じて DirectoryIteratorSplFileInfo オブジェクトを提供す setInfoClass 方法。その市場動向を随のマニュアルでの反射を示すもコメントありがとうございます

shell$ php --rc RecursiveDirectoryIterator
// ...
Method [ <internal:SPL, inherits SplFileInfo> public method setInfoClass ] {  
  - Parameters [1] {
    Parameter #0 [ <optional> $class_name ]
  }
}

よくあるご質問をこちらですが、繰り返し処理のディレクトリ

$rit->getInnerIterator()->setInfoClass('MyFileInfo');
foreach($rit as $file) {
    var_dump( $file );
}

を取得し、以下のweird結果

object(MyFileInfo)#4 (3) {
  ["props"]=>UNKNOWN:0
  ["pathName":"SplFileInfo":private]=>string(49) "/some/file/path/someFile.txt"
  ["fileName":"SplFileInfo":private]=>string(25) "someFile.txt"
}

なのでリスペクトしながら、 MyFileInfo ピックアップし、アクセスできないものプロパティを表示します。れば追加の方法で呼び出して、その特性は不明である。

ではないの設定情報クラスの反復子のSplFileInfoオブジェクト(例に示すように、マニュアル)まで同一の未知結果:

foreach($rit as $file) {
    // $file is a SplFileInfo instance
    $file->setInfoClass('MyFileInfo');
    var_dump( $file->getFileInfo() );
}

しかし、がん

foreach($rit as $file) {
    $file = new MyFileInfo($file);
    var_dump( $file );
}

残念ながら、コードを使いたいことではやや複雑なので、書庫の一部をより反復子.のMyFileInfoクラスのこのようにという選択肢はないと思います。

いというかこの作業はなぜPHP動すか?

感謝。

役に立ちましたか?

解決

できないそのもので

class MyFileInfo extends SplFileInfo
{
  public $props;

  public function __construct($filename) {
    $this->props = array(
      'foo' => '1',
      'bar' => '2'
    );

    parent::__construct($filename);
  }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top