Inhaltsverzeichnis
Vorwort
代码
实现default_value方法
代码说明
获取参数
zend_parse_parameters
FAST ZPP
返回值
Implementieren Sie die Methode default_value h2>
default_value Methode Quellcode der PHP-Erweiterung:
rrreee

Codebeschreibung

Parameter abrufen
Rückgabewert
Heim Backend-Entwicklung PHP7 Beispiele zur Erläuterung des Rückgabewerts der PHP7-Erweiterungsentwicklung

Beispiele zur Erläuterung des Rückgabewerts der PHP7-Erweiterungsentwicklung

Oct 15, 2021 pm 04:32 PM
php7

Vorwort

Dieses Mal zeigen wir, wie man eingehende Parameter akzeptiert und Rückgabewerte in PHP-Erweiterungen ausgibt.

<?php
    function default_value ($type, $value = null) {
        if ($type == "int") {
            return $value ?? 0;
        } else if ($type == "bool") {
            return $value ?? false;
        } else if ($type == "str") {
            return is_null($value) ? "" : $value;
        }
        return null;
    }
 
    var_dump(default_value("int"));
    var_dump(default_value("int", 1));
    var_dump(default_value("bool"));
    var_dump(default_value("bool", true));
    var_dump(default_value("str"));
    var_dump(default_value("str", "a"));
    var_dump(default_value("array"));
?>
Nach dem Login kopieren

Wir werden die Methode default_value in der Erweiterung implementieren. [Empfohlen: „PHP7-Tutorial"]default_value方法。【推荐:《PHP7教程》】

代码

实现default_value方法

default_value方法的PHP扩展源码:

PHP_FUNCTION(default_value)
{
    zend_string     *type;    
    zval            *value = NULL;
 
#ifndef FAST_ZPP
    /* Get function parameters and do error-checking. */
    if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|z", &type, &value) == FAILURE) {
        return;
    }    
#else
    ZEND_PARSE_PARAMETERS_START(1, 2)
        Z_PARAM_STR(type)
        Z_PARAM_OPTIONAL
        Z_PARAM_ZVAL_EX(value, 0, 1)
    ZEND_PARSE_PARAMETERS_END();
#endif
     
    if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "int", 3) == 0 && value == NULL) {
        RETURN_LONG(0);
    } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "int", 3) == 0 && value != NULL) {
        RETURN_ZVAL(value, 0, 1); 
    } else if (ZSTR_LEN(type) == 4 && strncmp(ZSTR_VAL(type), "bool", 4) == 0 && value == NULL) {
        RETURN_FALSE;
    } else if (ZSTR_LEN(type) == 4 && strncmp(ZSTR_VAL(type), "bool", 4) == 0 && value != NULL) {
        RETURN_ZVAL(value, 0, 1); 
    } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "str", 3) == 0 && value == NULL) {
        RETURN_EMPTY_STRING();
    } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "str", 3) == 0 && value != NULL) {
        RETURN_ZVAL(value, 0, 1); 
    } 
    RETURN_NULL();
}
Nach dem Login kopieren

代码说明

获取参数

在PHP7中提供了两种获取参数的方法。zend_parse_parameters和FAST ZPP方式。

zend_parse_parameters

在PHP7之前一直使用zend_parse_parameters函数获取参数。这个函数的作用,就是把传入的参数转换为PHP内核中相应的类型,方便在PHP扩展中使用。
参数说明:
第一个参数,参数个数。一般就使用ZEND_NUM_ARGS(),不需要改变。
第二个参数,格式化字符串。这个格式化字符串的作用就是,指定传入参数与PHP内核类型的转换关系。

代码中 S|z 的含义就是:
S 表示参数是一个字符串。要把传入的参数转换为zend_string类型。
| 表示之后的参数是可选。可以传,也可以不传。
z 表示参数是多种类型。要把传入的参数转换为zval类型。

除此之外,还有一些specifier,需要注意:
!如果接收了一个PHP语言里的null变量,则直接把其转成C语言里的NULL,而不是封装成IS_NULL类型的zval。
/ 如果传递过来的变量与别的变量共用一个zval,而且不是引用,则进行强制分离,新的zval的is_ref__gc==0, and refcount__gc==1.

更多格式化字符串的含义可以查看官方网站。https://wiki.php.net/rfc/fast_zpp

FAST ZPP

在PHP7中新提供的方式。是为了提高参数解析的性能。对应经常使用的方法,建议使用FAST ZPP方式。
使用方式:
以ZEND_PARSE_PARAMETERS_START(1, 2)开头。
第一个参数表示必传的参数个数,第二个参数表示最多传入的参数个数。
ZEND_PARSE_PARAMETERS_END();结束。
中间是传入参数的解析。
值得注意的是,一般FAST ZPP的宏方法与zend_parse_parameters的specifier是一一对应的。如:
Z_PARAM_OPTIONAL 对应 |
Z_PARAM_STR    对应 S
但是,Z_PARAM_ZVAL_EX方法比较特殊。它对应两个specifier,分别是 ! 和 / 。! 对应宏方法的第二个参数。/ 对应宏方法的第三个参数。如果想开启,只要设置为1即可。

FAST ZPP相应的宏方法可以查看官方网站 https://wiki.php.net/rfc/fast_zpp#proposal

返回值

方法的返回值是使用RETURN_
Code

Implementieren Sie die Methode default_value h2>
default_value Methode Quellcode der PHP-Erweiterung:
rrreee

Codebeschreibung

Parameter abrufen


In PHP7 gibt es zwei Methoden zum Abrufen von Parametern bereitgestellt. zend_parse_parameters und FAST ZPP-Modus.

zend_parse_parameters


Vor PHP7 wurde die Funktion zend_parse_parameters verwendet, um Parameter zu erhalten. Die Funktion dieser Funktion besteht darin, die eingehenden Parameter in die entsprechenden Typen im PHP-Kernel umzuwandeln, damit sie in PHP-Erweiterungen verwendet werden können.
Parameterbeschreibung:
Der erste Parameter, die Anzahl der Parameter. Im Allgemeinen verwenden Sie einfach ZEND_NUM_ARGS(), keine Änderung erforderlich.
Der zweite Parameter ist die Formatzeichenfolge. Die Funktion dieser Formatzeichenfolge besteht darin, die Konvertierungsbeziehung zwischen den eingehenden Parametern und dem PHP-Kerntyp anzugeben.

Die Bedeutung von S|z im Code ist: S bedeutet, dass der Parameter eine Zeichenfolge ist. Konvertieren Sie die eingehenden Parameter in den Typ zend_string.
|. bedeutet, dass die folgenden Parameter optional sind. Es kann weitergegeben werden oder nicht. 🎜z gibt an, dass es sich bei den Parametern um mehrere Typen handelt. Konvertieren Sie die eingehenden Parameter in den ZVAL-Typ. 🎜🎜Darüber hinaus gibt es einige Spezifizierer, die Aufmerksamkeit erfordern: 🎜! Wenn eine Nullvariable in der PHP-Sprache empfangen wird, wird sie direkt in NULL in der C-Sprache konvertiert, anstatt sie in ein zval vom Typ IS_NULL zu kapseln. 🎜/ Wenn die übergebene Variable einen Zval mit anderen Variablen teilt und keine Referenz ist, wird eine erzwungene Trennung durchgeführt. Der neue Zval ist_ref__gc==0 und refcount__gc==1.🎜🎜Weitere Bedeutungen formatierter Zeichenfolgen finden Sie im offiziellen Webseite. https://wiki.php.net/rfc/fast_zpp🎜

FAST ZPP

🎜Neue Methode in PHP7 bereitgestellt. Es dient dazu, die Leistung der Parameteranalyse zu verbessern. Für häufig verwendete Methoden empfiehlt sich die Verwendung der FAST ZPP-Methode. 🎜So verwenden Sie: 🎜Beginnen Sie mit ZEND_PARSE_PARAMETERS_START(1, 2). 🎜Der erste Parameter gibt die Anzahl der Parameter an, die übergeben werden müssen, und der zweite Parameter gibt die maximale Anzahl der Parameter an, die übergeben werden können. 🎜Ende mit ZEND_PARSE_PARAMETERS_END();. 🎜Die Mitte ist das Parsen der eingehenden Parameter. 🎜Es ist erwähnenswert, dass die Makromethode von FAST ZPP im Allgemeinen eins zu eins dem Spezifizierer von zend_parse_parameters entspricht. Zum Beispiel: 🎜Z_PARAM_OPTIONAL entspricht |🎜Z_PARAM_STR entspricht S🎜Die Methode Z_PARAM_ZVAL_EX ist jedoch etwas Besonderes. Es entspricht zwei Spezifizierern, nämlich ! und /. ! Entspricht dem zweiten Parameter der Makromethode. / entspricht dem dritten Parameter der Makromethode. Wenn Sie es aktivieren möchten, setzen Sie es einfach auf 1. 🎜🎜Die entsprechende Makromethode von FAST ZPP kann auf der offiziellen Website https://wiki.php.net/rfc/fast_zpp#proposal eingesehen werden🎜

Rückgabewert

🎜Der Rückgabewert der Methode ist to Verwenden Sie RETURN_Die Makromethode, die mit code> beginnt, gibt zurück. Häufig verwendete Makromethoden sind: 🎜RETURN_NULL() Gibt null zurück🎜RETURN_LONG(l) Gibt den Ganzzahltyp zurück🎜RETURN_DOUBLE(d) Gibt den Gleitkommatyp zurück🎜RETURN_STR(s) Gibt einen String zurück. Der Parameter ist ein zend_string * Zeiger 🎜RETURN_STRING(s) Gibt einen String zurück. Der Parameter ist ein char * Zeiger 🎜RETURN_STRINGL(s, l) gibt einen String zurück. Der zweite Parameter ist die Stringlänge. 🎜RETURN_EMPTY_STRING() Gibt eine leere Zeichenfolge zurück. 🎜RETURN_ARR(r) Gibt ein Array zurück. Parameter sind zend_array*-Zeiger. 🎜RETURN_OBJ(r) gibt ein Objekt zurück. Parameter sind zend_object*-Zeiger. 🎜RETURN_ZVAL(zv, copy, dtor) gibt einen beliebigen Typ zurück. Parameter sind zval*-Zeiger. 🎜RETURN_FALSE Gibt „false“ zurück🎜RETURN_TRUE Gibt „true“ zurück🎜🎜

Das obige ist der detaillierte Inhalt vonBeispiele zur Erläuterung des Rückgabewerts der PHP7-Erweiterungsentwicklung. 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)

So installieren Sie die Mongo-Erweiterung in PHP7.0 So installieren Sie die Mongo-Erweiterung in PHP7.0 Nov 21, 2022 am 10:25 AM

So installieren Sie die Mongo-Erweiterung in PHP7.0: 1. Erstellen Sie die Mongodb-Benutzergruppe und den Mongodb-Benutzer. 2. Laden Sie das Mongodb-Quellcodepaket herunter und platzieren Sie das Quellcodepaket im Verzeichnis „/usr/local/src/“. Geben Sie das Verzeichnis „src/“ ein. 4. Entpacken Sie das Quellcodepaket. 6. Kopieren Sie die Dateien in das Verzeichnis „mongodb/“.

Was soll ich tun, wenn das Plug-in in php7.0 installiert ist, aber immer noch angezeigt wird, dass es nicht installiert ist? Was soll ich tun, wenn das Plug-in in php7.0 installiert ist, aber immer noch angezeigt wird, dass es nicht installiert ist? Apr 02, 2024 pm 07:39 PM

So beheben Sie das Problem, dass das Plugin in PHP 7.0 nicht installiert ist: Überprüfen Sie die Plugin-Konfiguration und aktivieren Sie das Plugin. Starten Sie PHP neu, um die Konfigurationsänderungen zu übernehmen. Überprüfen Sie die Berechtigungen der Plugin-Datei, um sicherzustellen, dass sie korrekt sind. Installieren Sie fehlende Abhängigkeiten, um sicherzustellen, dass das Plugin ordnungsgemäß funktioniert. Wenn alle anderen Schritte fehlschlagen, erstellen Sie PHP neu. Weitere mögliche Ursachen sind inkompatible Plugin-Versionen, das Laden der falschen Version oder PHP-Konfigurationsprobleme.

So lösen Sie das Problem, wenn PHP7 erkennt, dass der TCP-Port nicht funktioniert So lösen Sie das Problem, wenn PHP7 erkennt, dass der TCP-Port nicht funktioniert Mar 22, 2023 am 09:30 AM

In PHP5 können wir die Funktion fsockopen() verwenden, um den TCP-Port zu erkennen. Mit dieser Funktion können Sie eine Netzwerkverbindung herstellen und eine Netzwerkkommunikation durchführen. In PHP7 kann die Funktion fsockopen() jedoch auf einige Probleme stoßen, z. B. dass der Port nicht geöffnet werden kann, keine Verbindung zum Server hergestellt werden kann usw. Um dieses Problem zu lösen, können wir die Funktionen socket_create() und socket_connect() verwenden, um den TCP-Port zu erkennen.

FAQ-Leitfaden zur PHP-Serverumgebung: Häufige Probleme schnell lösen FAQ-Leitfaden zur PHP-Serverumgebung: Häufige Probleme schnell lösen Apr 09, 2024 pm 01:33 PM

Zu den gängigen Lösungen für PHP-Serverumgebungen gehört die Sicherstellung, dass die richtige PHP-Version installiert ist und relevante Dateien in das Modulverzeichnis kopiert wurden. Deaktivieren Sie SELinux vorübergehend oder dauerhaft. Überprüfen und konfigurieren Sie PHP.ini, um sicherzustellen, dass die erforderlichen Erweiterungen hinzugefügt und korrekt eingerichtet wurden. Starten oder starten Sie den PHP-FPM-Dienst neu. Überprüfen Sie die DNS-Einstellungen auf Auflösungsprobleme.

So installieren und implementieren Sie PHP7.0 So installieren und implementieren Sie PHP7.0 Nov 30, 2022 am 09:56 AM

So installieren und implementieren Sie PHP7.0: 1. Gehen Sie zur offiziellen PHP-Website, um die dem lokalen System entsprechende Installationsversion herunterzuladen. 2. Extrahieren Sie die heruntergeladene ZIP-Datei in das angegebene Verzeichnis. 3. Öffnen Sie das Befehlszeilenfenster und gehen Sie zu das Verzeichnis „E:\php7“ Führen Sie einfach den Befehl „php -v“ aus.

Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Wie setze ich nach dem Neustart des Systems automatisch Berechtigungen von Unixsocket fest? Mar 31, 2025 pm 11:54 PM

So setzen Sie die Berechtigungen von Unixsocket automatisch nach dem Neustart des Systems. Jedes Mal, wenn das System neu startet, müssen wir den folgenden Befehl ausführen, um die Berechtigungen von Unixsocket: sudo ...

Warum tritt bei der Installation einer Erweiterung mit PECL in einer Docker -Umgebung ein Fehler auf? Wie löst ich es? Warum tritt bei der Installation einer Erweiterung mit PECL in einer Docker -Umgebung ein Fehler auf? Wie löst ich es? Apr 01, 2025 pm 03:06 PM

Ursachen und Lösungen für Fehler Bei der Verwendung von PECL zur Installation von Erweiterungen in der Docker -Umgebung, wenn die Docker -Umgebung verwendet wird, begegnen wir häufig auf einige Kopfschmerzen ...

Was ist besser, PHP8 oder PHP7? Was ist besser, PHP8 oder PHP7? Nov 16, 2023 pm 03:09 PM

Im Vergleich zu PHP7 bietet PHP8 einige Vorteile und Verbesserungen in Bezug auf Leistung, neue Funktionen und Syntaxverbesserungen, Typsystem, Fehlerbehandlung und Erweiterungen. Die Wahl der zu verwendenden Version hängt jedoch von Ihren spezifischen Anforderungen und Projektumständen ab. Detaillierte Einführung: 1. Leistungsverbesserung: PHP8 führt den Just-in-Time-Compiler (JIT) ein, der die Ausführungsgeschwindigkeit des Codes verbessern kann. 2. Neue Funktionen und Syntaxverbesserungen. PHP8 unterstützt die Deklaration benannter Parameter und optionaler Parameter. Durch die flexiblere Gestaltung von Funktionen werden anonyme Klassen, Typdeklarationen von Eigenschaften usw. eingeführt.

See all articles