Für Test's und Debuggig möchte ich eine Variable prüfen, ob diese eine (auch geschlossene) Resource enthält.
Dafür möchte ich nicht den Weg über var_dump() und die Output-Control-Funktionen gehen.
Eine Prüfung mit is_resource() liefert leider für eine geschlossene Resource false.
Die Funktion gettype() liefert für eine geschlossene Resource "unknown type", auch keine sichere Sache.
Im Netz ist noch zu finden, @get_resource_type() zu nutzen, die NULL im Fehlerfall liefert.
Ohne Fehler-Kontroll-Operator wird jedoch wenn keine Resource übergeben wird eine lästige Warnung geworfen.
Einen Fehler zu provozieren ist zudem auch keine schöne Lösung.
Zudem werden trotz Fehler-Kontroll-Operator die Fehler intern gespeichert was ich für meine konkrete Anwendung nicht gebrauchen kann.
Hier meine aktuelle Lösung:
Bevor ich das einbaue möchte ich folgende Fragen klären:
- Ist das sicher oder habe ich einen/mehrere Fälle übersehen?
- Gibt es eine bessere Lösungen?
LG jspit
Dafür möchte ich nicht den Weg über var_dump() und die Output-Control-Funktionen gehen.
PHP-Code:
$resource = fopen('test.txt','r');
fclose($resource);
var_dump($resource); //resource(4) of type (Unknown)
is_resource() ist keine strikte Typprüfungsmethode: sie gibt FALSE zurück, wenn var eine Variable mit einer Ressource ist, die geschlossen wurde.
Im Netz ist noch zu finden, @get_resource_type() zu nutzen, die NULL im Fehlerfall liefert.
Ohne Fehler-Kontroll-Operator wird jedoch wenn keine Resource übergeben wird eine lästige Warnung geworfen.
Einen Fehler zu provozieren ist zudem auch keine schöne Lösung.
Zudem werden trotz Fehler-Kontroll-Operator die Fehler intern gespeichert was ich für meine konkrete Anwendung nicht gebrauchen kann.
Hier meine aktuelle Lösung:
PHP-Code:
function isResource($v){
if(is_resource($v)) return true;
$code = strtoupper(var_export($v,true));
return $code==="NULL" AND $v !== NULL;
}
- Ist das sicher oder habe ich einen/mehrere Fälle übersehen?
- Gibt es eine bessere Lösungen?
LG jspit
Kommentar