Heim Backend-Entwicklung PHP-Tutorial PHP: Detaillierte Erläuterung der Beispiele für Ressourcendatentypen

PHP: Detaillierte Erläuterung der Beispiele für Ressourcendatentypen

May 16, 2018 pm 04:08 PM

Was sind Ressourcendatentypen?

Der Ressourcendatentyp wird in PHP4 eingeführt. Ressource ist ein spezieller Variablentyp, der einen Verweis auf eine externe Ressource enthält: beispielsweise eine geöffnete Datei, eine Datenbankverbindung, einen Grafikbereich usw.

Ressourcen werden durch spezielle Funktionen erstellt und genutzt.

Verwendung von Ressourcenvariablen in PHP

$fp = fopen("test.txt", "rw");  
  
var_dump($fp);  
  
fclose($fp);
Nach dem Login kopieren

Ergebnis drucken: Ressource(5) vom Typ (Stream)

Nummer 5: Gibt an, dass die Ressourcen-ID 5 ist, Speziell Die Bedeutung wird später eingeführt.

stream: Name des Ressourcentyps.

Ressourcen-ID

Der Kernel speichert die registrierten Ressourcenvariablen in einer HashTable und verwendet den Schlüssel in der HashTable, in der sich die Ressource befindet, als Ressourcen-ID.

Tatsächlich speichert die Ressourcenvariable in PHP also tatsächlich eine Ganzzahl, und die entsprechende Ressource in der HashTable wird über diese ID gefunden.

#define Z_RESVAL(zval)          (zval).value.lval  
#define Z_RESVAL_P(zval)        Z_RESVAL(*zval)  
#define Z_RESVAL_PP(zval)       Z_RESVAL(**zval)
Nach dem Login kopieren

Das obige Makro ist die von ZE im Kernel verwendete API, um Ressourcenvariablen Werte zuzuweisen. Es ist ersichtlich, dass es sich tatsächlich um eine Zuweisung an eine Ganzzahlvariable handelt.

Ressourcentypname

Um Ressourcentypen zu unterscheiden, müssen wir Typnamen für die von uns definierten Ressourcen definieren.

#define MY_RES_NAME "my_resource" //资源类型名称,PHP通过var_dump打印资源变量时会看到这个名称  
static int my_resource_descriptor;  
  
ZEND_MINIT_FUNCTION(jinyong)  
{  
    my_resource_descriptor = zend_register_list_destructors_ex(NULL, NULL, MY_RES_NAME, module_number);//向内核中注册新的资源类型  
}
Nach dem Login kopieren

ZEND_MINIT_FUNCTION(jinyong) führt alle erweiterten ZEND_MINIT_FUNCTIONs aus, wenn PHP als SAPI in den Speicher geladen wird (z. B. die mod_php5-Erweiterung von Apache).

Wobei jinyong der Name der aktuellen Erweiterung ist. Der Name der Erweiterung lautet derzeit beispielsweise jinyong

Zum leichteren Verständnis stellen wir uns das als die Erweiterung vor, die während der Initialisierung einen neuen Ressourcentyp beim Kernel registriert.

Ressourcenvariable erstellen

Der Ressourcentyp wurde erfolgreich registriert und ein unterscheidender Typname wurde für die Ressource definiert. Variablen für diese Ressource können jetzt verwendet werden.

Implementieren Sie die fopen-Funktion in PHP:

PHP_FUNCTION(my_fopen)  
{  
    zval *res;  
  
    char *filename, *mode;  
      
    int filename_strlen, mode_strlen;  
  
    FILE *fp;  
      
    if(zend_parse_parameters(ZEND_NUM_ARGS TSRMLS_CC, "s|s",  &filename, &filename_strlen, &mode, &mode_strlen) == FAILURE){  
        RETURN_FALSE;  
    }  
  
    //此处省略了对参数的有效性验证  
    fp = fopen(filename, mode);  
  
    ZEND_REGISTER_RESOURCE(res, fp, my_resource_descriptor);//向全局变量&EG(regular_list)中注册资源变量,并将对应HashTable的ID赋值给res  
  
    RETURN_RESOURCE(res);//向PHP返回资源变量  
}
Nach dem Login kopieren

Hier wird die Funktion namens my_fopen in PHP definiert. my_fopen(string $file_name, string $mode)

implementiert die fclose-Funktion in PHP:

PHP_FUNCTION(my_fclose)  
{  
    zval *res;  
      
    FILE *fp;  
  
    if(zend_parse_parameters(ZEND_NUM_ARGS TSRMS_CC, "r", &res) == FAILURE){  
        RETURN_FALSE;  
    }  
  
    if(Z_TYPE_P(res) == IS_RESOURCE){//判断变量类型是否是资源类型  
        zend_hash_index_del(&EG(regular_list), Z_RESVAL_P(res));//EG就类似于PHP中的$_GLOBALS。在全局资源变量regular_list中删除对应ID的资源  
    }else{  
        php_error_docref(NULL TSRMLS_CC, E_WARNING, "参数必须是资源类型变量");  
        RETURN_FALSE;  
    }  
  
    RETURN_TRUE;  
}
Nach dem Login kopieren

definiert die Funktion namens my_fclose in PHP. my_fclose($resource)

Mit der Methode in der benutzerdefinierten Erweiterung in PHP kann

my_fwrite($fp, "aaTest");  
  
var_dump($fp);  
  
my_fclose($fp);  
  
var_dump($fp);
Nach dem Login kopieren

normal geöffnet und geschlossen werden Ressource.

Ressourcen freigeben

Da die PHP4-Zend-Engine ein Ressourcenzählsystem einführt, kann sie automatisch erkennen, dass auf eine Ressource nicht mehr verwiesen wird (genau wie Java). In diesem Fall werden alle von dieser Ressource verwendeten externen Ressourcen vom Garbage Collection-System freigegeben. Daher ist es selten erforderlich, manuell Speicher mithilfe einer Free-Result-Funktion freizugeben.

Hinweis: Permanente Datenbankverbindungen sind etwas Besonderes, sie werden vom Garbage-Collection-System nicht zerstört.

Im nächsten Abschnitt erklären wir den „Nullwert (null) “ unter den beiden speziellen Datentypen.

Das obige ist der detaillierte Inhalt vonPHP: Detaillierte Erläuterung der Beispiele für Ressourcendatentypen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Welcher Datentyp sollte für das Geschlechtsfeld in der MySQL-Datenbank verwendet werden? Welcher Datentyp sollte für das Geschlechtsfeld in der MySQL-Datenbank verwendet werden? Mar 14, 2024 pm 01:21 PM

In einer MySQL-Datenbank können Geschlechtsfelder normalerweise im ENUM-Typ gespeichert werden. ENUM ist ein Aufzählungstyp, der es uns ermöglicht, aus einer Menge vordefinierter Werte einen als Wert eines Feldes auszuwählen. ENUM ist eine gute Wahl, wenn eine feste und begrenzte Option wie das Geschlecht dargestellt wird. Schauen wir uns ein konkretes Codebeispiel an: Angenommen, wir haben eine Tabelle namens „users“, die Benutzerinformationen, einschließlich Geschlecht, enthält. Jetzt wollen wir ein Feld für das Geschlecht erstellen, wir können die Tabellenstruktur so gestalten: CRE

So finden Sie Ressourcen auf einer 115-Netzwerkfestplatte So finden Sie Ressourcen auf einer 115-Netzwerkfestplatte Feb 23, 2024 pm 05:10 PM

Auf der 115-Netzwerkfestplatte befinden sich viele Ressourcen. Wie findet man also Ressourcen? Benutzer können in der Software nach den benötigten Ressourcen suchen, dann die Download-Schnittstelle aufrufen und dann das Speichern auf der Netzwerkfestplatte auswählen. Diese Einführung in die Methode zum Auffinden von Ressourcen auf 115 Netzwerkfestplatten kann Ihnen den spezifischen Inhalt erklären. Im Folgenden finden Sie eine detaillierte Einführung. Schauen Sie sich um. Wie finde ich Ressourcen auf 115 Netzwerkfestplatten? Antwort: Suchen Sie den Inhalt in der Software und klicken Sie dann, um ihn auf der Netzwerkfestplatte zu speichern. Ausführliche Einführung: 1. Geben Sie zunächst die gewünschten Ressourcen in der App ein. 2. Klicken Sie dann auf den angezeigten Schlüsselwort-Link. 3. Rufen Sie dann die Download-Oberfläche auf. 4. Klicken Sie im Inneren auf „Auf Netzwerkfestplatte speichern“.

Was ist der beste Datentyp für Geschlechtsfelder in MySQL? Was ist der beste Datentyp für Geschlechtsfelder in MySQL? Mar 15, 2024 am 10:24 AM

In MySQL ist der ENUM-Aufzählungstyp der am besten geeignete Datentyp für Geschlechtsfelder. Der Enumerationstyp ENUM ist ein Datentyp, der die Definition einer Menge möglicher Werte ermöglicht. Das Geschlechtsfeld eignet sich für die Verwendung des ENUM-Typs, da das Geschlecht normalerweise nur zwei Werte hat, nämlich männlich und weiblich. Als Nächstes werde ich anhand spezifischer Codebeispiele zeigen, wie man in MySQL ein Geschlechtsfeld erstellt und den Aufzählungstyp ENUM zum Speichern von Geschlechtsinformationen verwendet. Im Folgenden sind die Schritte aufgeführt: Erstellen Sie zunächst eine Tabelle mit dem Namen „users“ in MySQL, einschließlich

Warum hatte Han Xiaoquan plötzlich keine Ressourcen mehr? Warum hatte Han Xiaoquan plötzlich keine Ressourcen mehr? Feb 24, 2024 pm 03:22 PM

Han Xiaoquan ist eine Software, mit der man viele koreanische Dramen ansehen kann. Warum gibt es also plötzlich keine Ressource mehr? Aufgrund von Netzwerkproblemen, Versionsproblemen oder Urheberrechtsproblemen verfügt diese Software möglicherweise nicht über Ressourcen. Dieser Artikel über den Grund, warum Han Xiaoquan plötzlich keine Ressourcen mehr hat, kann Ihnen den spezifischen Inhalt erklären. Im Folgenden finden Sie eine detaillierte Einführung. Schauen Sie sich um. Warum hatte Han Xiaoquan plötzlich keine Ressourcen mehr? Antwort: Aufgrund von Netzwerkproblemen, Versionsproblemen und Urheberrechtsproblemen, detaillierte Einführung: 1. Lösung von Netzwerkproblemen: Sie können ein anderes Netzwerk auswählen und sich dann erneut bei der Software anmelden, um es zu versuchen . 2. Lösung von Versionsproblemen: Benutzer können die neueste Version dieser Software von der offiziellen Website herunterladen. 3. Lösungen für Urheberrechtsprobleme: Einige koreanische Dramen werden aufgrund von Urheberrechtsproblemen aus den Regalen genommen. Sie können andere koreanische Dramen zum Ansehen auswählen.

Mindmap der Python-Syntax: Vertiefendes Verständnis der Codestruktur Mindmap der Python-Syntax: Vertiefendes Verständnis der Codestruktur Feb 21, 2024 am 09:00 AM

Python wird aufgrund seiner einfachen und leicht lesbaren Syntax in einer Vielzahl von Bereichen häufig verwendet. Es ist von entscheidender Bedeutung, die Grundstruktur der Python-Syntax zu beherrschen, um sowohl die Programmiereffizienz zu verbessern als auch ein tiefes Verständnis für die Funktionsweise des Codes zu erlangen. Zu diesem Zweck bietet dieser Artikel eine umfassende Mindmap, die verschiedene Aspekte der Python-Syntax detailliert beschreibt. Variablen und Datentypen Variablen sind Container, die zum Speichern von Daten in Python verwendet werden. Die Mindmap zeigt gängige Python-Datentypen, einschließlich Ganzzahlen, Gleitkommazahlen, Zeichenfolgen, boolesche Werte und Listen. Jeder Datentyp hat seine eigenen Eigenschaften und Betriebsmethoden. Operatoren Operatoren werden verwendet, um verschiedene Operationen an Datentypen auszuführen. Die Mindmap deckt die verschiedenen Operatortypen in Python ab, z. B. arithmetische Operatoren und Verhältnisse

Ausführliche Erklärung zur Verwendung des booleschen Typs in MySQL Ausführliche Erklärung zur Verwendung des booleschen Typs in MySQL Mar 15, 2024 am 11:45 AM

Detaillierte Erläuterung der Verwendung boolescher Typen in MySQL MySQL ist ein häufig verwendetes relationales Datenbankverwaltungssystem. In praktischen Anwendungen ist es häufig erforderlich, boolesche Typen zur Darstellung logischer wahrer und falscher Werte zu verwenden. In MySQL gibt es zwei Darstellungsmethoden vom booleschen Typ: TINYINT(1) und BOOL. In diesem Artikel wird die Verwendung boolescher Typen in MySQL ausführlich vorgestellt, einschließlich der Definition, Zuweisung, Abfrage und Änderung boolescher Typen, und anhand spezifischer Codebeispiele erläutert. 1. Der boolesche Typ ist in MySQL definiert und kann sein

Was ist die beste Datentypauswahl für das Geschlechtsfeld in MySQL? Was ist die beste Datentypauswahl für das Geschlechtsfeld in MySQL? Mar 14, 2024 pm 01:24 PM

Beim Entwerfen von Datenbanktabellen ist die Auswahl des geeigneten Datentyps für die Leistungsoptimierung und Datenspeichereffizienz sehr wichtig. In der MySQL-Datenbank gibt es eigentlich keine sogenannte beste Wahl für den Datentyp zum Speichern des Geschlechtsfelds, da das Geschlechtsfeld im Allgemeinen nur zwei Werte hat: männlich oder weiblich. Aus Gründen der Effizienz und Platzersparnis können wir jedoch einen geeigneten Datentyp zum Speichern des Geschlechtsfelds auswählen. In MySQL ist der Aufzählungstyp der am häufigsten verwendete Datentyp zum Speichern von Geschlechtsfeldern. Ein Aufzählungstyp ist ein Datentyp, der den Wert eines Felds auf einen begrenzten Satz beschränken kann.

So aktualisieren Sie die Ressourcen von Dying Light unendlich So aktualisieren Sie die Ressourcen von Dying Light unendlich Jan 24, 2024 pm 04:03 PM

Im Spiel Dying Light kann es sein, dass viele Spieler in der Anfangsphase aufgrund fehlender Ressourcen von unzähligen Zombies umgeben sind. Manchmal gehen sie auch Risiken ein, um gefangene Wanderer zu retten, und diese Wanderer können auch einige Nebenaufgaben übernehmen, die nach Abschluss reichlich belohnt werden. Dying Light Unbegrenzter Ressourcenerwerb Suchen Sie zunächst ein Hilfspaket und legen Sie es in das Lager. Wählen Sie auf der Startseite des [Inventars] einen Artikel mit einer größeren Menge aus und klicken Sie bei Auswahl mit der linken Maustaste. 2. Drücken Sie dann [ESC], ohne die Maus zu bewegen. Drücken Sie einfach einmal kurz, wenn Sie das Gefühl haben, dass die Lagerseite angezeigt wird . Bewegen Sie die Maus nicht und halten Sie sie nicht gedrückt. Die Aufforderung zum Speichern der Elemente wird angezeigt. 3Finden Sie abschließend das [Katastrophenpaket] im Lager und lassen Sie sich von ihm dazu auffordern

See all articles