In PHP verwenden wir bei der Verarbeitung von ZIP -Dateien häufig die Funktion zip_read (), um Einträge im komprimierten Paket zu lesen. Viele Anfänger haben jedoch festgestellt, dass diese Funktion kein Objekt oder Array zurückgibt, sondern einen "Ressourcentyp". Dies lässt viele Entwickler sich fragen: Warum ist PHP so gestaltet? Welche Bedeutung hat dieses Design? In diesem Artikel wird dieses Problem eingehend untersucht.
Der Ressourcentyp ist ein spezieller Datentyp in PHP, der ein Handle einer externen Ressource darstellt. Zu den gängigen Ressourcentypen gehören Dateihandles, Datenbankverbindungen, Bildhandles usw. Die Ressource selbst enthält keine Daten, sondern einen Verweis auf die zugrunde liegende Systemressource.
Funktionen von Ressourcentypen:
Ressourcen werden intern von PHP verwaltet.
Ressourcen können nicht direkt wie Arrays oder Objekte betrieben werden.
Nach der Verwendung der Ressource müssen Sie die entsprechende Nah- oder Freigabefunktion aufrufen, wie z. B. fcLOSE () .
Die ursprüngliche Absicht der Funktion zip_read () besteht darin, Einträge in komprimierten Dateien effizient zu lesen. Es gehört zur zugrunde liegenden Schnittstelle in der ZIP -Erweiterung von PHP.
$zip = zip_open("http://m66.net/example.zip");
if (is_resource($zip)) {
while ($zip_entry = zip_read($zip)) {
echo "Entry name: " . zip_entry_name($zip_entry) . "\n";
}
zip_close($zip);
}
Im obigen Code gibt ZIP_OPEN () einen Ressourcentyp zurück, wobei das Öffnen der ZIP -Datei angezeigt wird, und zip_read () gibt auch den Ressourcentyp zurück, wobei der aktuell gelesene ZIP -Eintrag angibt.
Es gibt mehrere Grundgründe, warum Ressourcen hier anstelle von Objekten oder Arrays zurückgegeben werden:
Ressourcen sind leichte Handles, und PHP verwaltet Ressourcen intern speichersparend als Objekte. Dieses Design kann bei der Behandlung großer komprimierter Dateien effektiv die Leistungsaufwand reduzieren.
ZIP_READ () ist eine relativ frühe Funktion. Es wird basierend auf der zugrunde liegenden Schnittstelle der C -Bibliothek implementiert. Das PHP -Objektmodell war während des Designs nicht ausgereift, und die Verwendung von Ressourcentypen entspricht eher der Implementierungsmethode zu diesem Zeitpunkt.
Ressourcentypen ermöglichen es Entwicklern, den Inhalt des komprimierten Pakets flexibler zu bedienen und Daten Schritt für Schritt durch mehrere zugehörige Funktionen (z. B. zip_entry_open () , zip_entry_read () , zip_entry_close () ) zu lesen, die Kontrolle des Prozesses zu verbessern.
Obwohl die Ressourcentypen effizient sind, sind sie nicht intuitiv genug, um zu arbeiten, und sind anfällig für Fehler. Nach PHP 5.2 wird empfohlen, die Ziparchive -Klasse zu verwenden, um ZIP -Dateien zu verarbeiten. Es verkauft ZIP-Operationen in objektorientierter Weise und macht es moderner und einfacher.
Beispiel:
$zip = new ZipArchive();
if ($zip->open('http://m66.net/example.zip') === TRUE) {
for ($i = 0; $i < $zip->numFiles; $i++) {
echo "Entry name: " . $zip->getNameIndex($i) . "\n";
}
$zip->close();
}
Vorteile von Ziparchive :
Gibt das Objekt zurück, der Code ist einfacher zu lesen und zu warten.
Weitere praktische Methoden werden eingekapselt.
Eingebauter Fehlerbehebungsmechanismus.
ZIP_READ () gibt den Ressourcentyp zurück, da sein Designziel eine niedrige, leichte und effiziente zugrunde liegende Schnittstelle ist.
Ressourcentypen ermöglichen PHP, zugrunde liegende Systemressourcen intern zu verwalten, Speicher zu sparen und die Leistung zu verbessern.
Dieses Design bringt die Nachteile der komplexen Betrieb und der Fehlerqualität mit sich.
Die moderne PHP-Entwicklung empfiehlt die Verwendung der Ziparchive- Klasse, die intuitiver und featurereicher ist.
Das Verständnis der Gründe für dieses Design hilft uns, die von PHP bereitgestellte ZIP -Betriebsoberfläche rationaler auszuwählen und zu verwenden.