Ben hemen hemen bu çirkin kafa yetiştirme sadece sızdıran soyutlama olduğuna kendimi ikna ettik, ama ben daha anlayışlı cevap yığın taşması disinda bir hata raporu dosyalama önce düşündüm ...
Ben autoloading yardımcı PHP bir sınıf yazıyorum. Ben Zend framework kullanır gibi saçma, yol-odaklı sınıf adlarını kullanarak nefret, bu yüzden yerine ardışık, bir dizin ve onun alt dizinlerinin geçmesi tüm PHP kaynak dosyaları bulmak ve sınıf için onları ayrıştırmak için bir nesne oluşturur bir sınıf yazdım sonra önbelleğe ve özdevinimli_yükle dizinini güncellemek için nesneyi sorar ki, başarısız kadar tekrar edilir tanımları.
Ben mümkün ben SplFileInfo
sınıfını kullandım endekslenmiş yolları için çok, yerleşik PHP sınıfları kullanmak ister.
Sınıfların dizini güncelleştirmek için gerekli operasyonların bazıları I dizi aramak gerektirir SplFileInfo
Benim nesne (I {[üzerinde karşılaştırma operatörü kullanarak küçük bir sorun haline çalıştırmak nerede, hangi tutar nesneleri 0)]} nesne.
Basitçe söylemek gerekirse, herhangi bir dosya ararken her zaman true döndürür. Ben ilk başta onun tarafından biraz şaşkın, ama ben iki makine üzerinde denedim ve bir arkadaşı onun üzerinde denemek yaşadım - aynı sonuç. Görünüşte ne olursa olsun, sen karşılaştırma (==
) operatörü kullanılarak iki SplFileInfo
nesneleri karşılaştırmak, doğru döner, tamamen dizinleri bulunan farklı dosyalara işaret bile. Ben dizideki her öğe üzerinde yinelemek ve bu şekilde karşılaştırmak, in_array()
kullanmak veya array_search()
için bir döngü kullanabilirsiniz olsun, her zaman true döndürür ve tamamen farklı bir dosyaya bana bir başvuru verir .
Ben biraz daha kurcaladım ve buldum bu iki SplFileInfo
noktası nesneleri bile, (===
) her zaman döndürür false operatörünü tanımlamak aynı yolu dize ile başlatıldı tam aynı dosyayı, için.
Benim kod için, bu demektir ki ben herhangi bir yeni dosyalar varsa bir dosya yeni olsa bile, dizinleyici nesne zaten bu dosya hakkında bilir ve hamle düşünüyor, görmek için sınıf dizini güncelleştirmek için gittiğinizde. Ben Yoladı dizeleri karşılaştırarak bu iş için yapılmış, ancak ettik yenilgiler bu tür ile başlamak için SplFileInfo
sınıfını kullanarak amacı.
PHP kılavuzu uzantısı geliştiriciler Ben tür SplFileInfo
göreli yolları gidermek ve düzgün, diğer göreli yollar ile, örneğin karşılaştırmak kadar akıllı olduğunu kabul neden olan, nesneler için karşılaştırma operatörleri aşırı söylüyor ./file
ve file
eşittir. Iki SplFileInfo
nesneleri karşılaştırırken bu always true döndürür çünkü sadece bu örnekleri doğru dönüyordu, çıkıyor!
Bu üzerinde çalışıyorum koduna bağlı değildir. Ben bazı yeni SplFileInfo
nesneler ile bir çizik kaynak dosyayı denedim ve bunları karşılaştırdık. Bu nesneler farklı dosyaları, aynı dosya, ve var olmayan dosyalara işaret olmadığını true döndürür.
Bu PHP nesneler karşılaştırma operatörleri için varsayılan davranış olmadığından, bu neden uzantısı sınıf tanımında bir şey olması zorunludur.
Herkes böyle davranıyor neden herhangi bir fikrim yok, ya da herhangi bir fikir var mı?