Ben setInfoClass
a> yöntemi ile bir Iterasyon özel bir sınıf ayarlamak çalışıyorum:
GetFileInfo ve getPathInfo denir zaman kullanılacak bir özel sınıf ayarlamak için bu yöntemi kullanın. Bu metoda sınıf adı SplFileInfo türetilmiş olmalıdır.
Benim sınıf Bu (basitleştirilmiş örnek) gibi:
class MyFileInfo extends SplFileInfo
{
public $props = array(
'foo' => '1',
'bar' => '2'
);
}
Yineleyici kod şudur:
$rit = new RecursiveIteratorIterator(
new RecursiveDirectoryIterator('/some/file/path/'),
RecursiveIteratorIterator::SELF_FIRST);
Yana RecursiveDirectoryIterator
is by inheritance through DirectoryIterator
also an SplFileInfo
object, it provides the setInfoClass
yöntemi. Bu kılavuzda listelenen, ancak yansıma orada olduğunu gösteriyor değil:
shell$ php --rc RecursiveDirectoryIterator
// ...
Method [ <internal:SPL, inherits SplFileInfo> public method setInfoClass ] {
- Parameters [1] {
Parameter #0 [ <optional> $class_name ]
}
}
Tüm buraya kadar iyi, fakat dizindeki üzerinde yineleme zaman
$rit->getInnerIterator()->setInfoClass('MyFileInfo');
foreach($rit as $file) {
var_dump( $file );
}
Ben şu garip sonuç almak
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
kaldırdı iken Yani, ben bu özellikleri bulunuyor erişemiyor. Ben özel yöntem eklerseniz, ben onları iyi çağırabilirsiniz, ancak herhangi bir özellikleri BİLİNMEYEN vardır.
Ben yineleyici bilgileri sınıf set yoksa, ama SplFileInfo nesnesine (kılavuzda örnekte gösterildiği gibi), aynı BİLİNMEYEN sonucu verecektir:
foreach($rit as $file) {
// $file is a SplFileInfo instance
$file->setInfoClass('MyFileInfo');
var_dump( $file->getFileInfo() );
}
Ben ne zaman Ancak, bu iş olacak
foreach($rit as $file) {
$file = new MyFileInfo($file);
var_dump( $file );
}
Ne yazık ki, bu kullanmak istediğiniz kod biraz daha karmaşık olduğunu ve biraz daha Yineleyicilerde yığar. Böyle MyFileInfo sınıf oluşturma bir seçenek değildir.
Yani, herkes bu çalışma almak için nasıl biliyor veya neden PHP bu garip davranır?
Teşekkürler.