国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim Backend-Entwicklung PHP-Tutorial Entwicklungshinweise zur PHP-Erweiterung (1) Erstellen Sie Array-Attribute von Klassen

Entwicklungshinweise zur PHP-Erweiterung (1) Erstellen Sie Array-Attribute von Klassen

Aug 08, 2016 am 09:23 AM
declare property zend

Es ist sehr einfach, eine Klasse zu initialisieren, wie zum Beispiel den folgenden Code
MYCLASS_PROTERTY_* Dies h?ngt mit der definierten Makrozeichenfolge zusammen

<code>zend_class_entry *myclass_ce;

zend_function_entry myclass_methods[] = {
    PHP_FE_END
};

PHP_MINIT_FUNCTION(myext)
{

    zend_class_entry ce;

    INIT_CLASS_ENTRY(ce, <span>"MyClass"</span>, myclass_methods);
    myclass_ce = zend_register_internal_class(&ce TSRMLS_CC);

    zend_<span>declare</span>_class_constant_string(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_VERSION), PHP_SLIM_VERSION);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_CONTAINER), ZEND_ACC_PUBLIC TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_APPS), ZEND_ACC_STATIC|ZEND_ACC_PROTECTED TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_NAME), ZEND_ACC_PROTECTED TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_ERROR), ZEND_ACC_PROTECTED TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_NOTFOUND), ZEND_ACC_PROTECTED TSRMLS_CC);
    zend_<span>declare</span>_property_null(myclass_ce, ZEND_STRL(MYCLASS_PROTERTY_NAME_MIDDLEWARE), ZEND_ACC_PROTECTED TSRMLS_CC);

    <span>return</span> SUCCESS;
}</code>

Die oben genannten Codes sind einige einfache Eigenschaften.
Beim Versuch, die Attribute eines Arrays für die Klasse myclass zu initialisieren, ist der Code für PHP wie folgt fehlgeschlagen:

<code><span><span>class</span><span>MyClass</span> {
    public $myArray = array<span>()</span>;
}


/* 對應(yīng)的<span>C</span>代碼 */

zval *myArray;
<span>MAKE_STD_ZVAL</span><span>(<span>myArray</span>)</span>;
array_init<span>(<span>myArray</span>)</span>;

zend_declare_property<span>(<span>myclass_ce</span>, <span>ZEND_STRL(MYCLASS_PROTERTY_NAME_MYCLASS)</span>, <span>myArray</span>, <span>ZEND_ACC_PUBLIC</span><span>TSRMLS_CC</span>)</span>;</span></code>

Bei der Ausführung des neuen C-Codes wurde kein Problem gefunden Wenn MyClass() aufgetreten ist, lautet der Fehler wie folgt:

<code>Internal zval<span>'s</span> can<span>'t</span> be arrays, objects <span>or</span> resources</code>

Ein Blick auf den Quellcode von Zend lautet wie folgt:

<code><span>if</span> (ce-><span><span>type</span> & <span>ZEND_INTERNAL_CLASS</span>) <span>{
     <span>switch</span>(<span>Z_TYPE_P(property)</span>) {
         <span>case</span><span>IS_ARRAY</span>:
         <span>case</span><span>IS_CONSTANT_ARRAY</span>:
         <span>case</span><span>IS_OBJECT</span>:
         <span>case</span><span>IS_RESOURCE</span>:
             <span>zend_error</span>(<span>E_CORE_ERROR</span>, "<span>Internal</span><span>zval's</span><span>can't</span><span>be</span><span>arrays</span>, <span>objects</span><span>or</span><span>resources</span>");
             <span>break</span>;
         <span>default</span>:
             <span>break</span>;
     }</span></span>
 }</code>

Wenn wir zend_register_internal_class aufrufen, wurde myclass_ce initialisiert Es ist ZEND_INTERNAL_CLASS und der myArray-Parameter von zend_declare_property ist derzeit vom Typ IS_ARRAY, sodass ein solcher Fehler auftritt.

Warum tritt ein solcher Fehler auf?

Das Ergebnis meiner Suche ist: http://grokbase.com/t/php/php-internals/07a4b14xvb/php-dev-how-declare-protected-array-property-at-internal - Klassenrichtig Dies ist das Ergebnis von 2007. Ich verwende die PHP5.4-Version und habe vorerst immer noch dieses Problem. Der Artikel enth?lt auch eine Methode zum getarnten Implementieren von Array-Eigenschaften, indem sie im Konstruktor implementiert wird .

<code>PHP_METHOD(myclass, __construct) {
    zval <span>*apps</span>, <span>*pThis</span>;
    pThis = getThis();
    MAKE_STD_ZVAL(apps);
    array_init(apps);
    add_property_zval_ex(pThis, ZEND_STRL(SLIM_SLIM_PROTERTY_NAME_APPS), apps);
}</code>

Der PHP-Code, der dieser Implementierungsmethode entspricht

<code><span><span>class</span><span>MyClass</span> {</span><span><span>function</span><span>__construct</span><span>()</span> {</span><span>$this</span>->app = <span>array</span>();  
    }
}</code>

Das Obige stellt die Entwicklungsnotizen zur PHP-Erweiterung vor (1) Array-Attribute der erstellten Klasse, einschlie?lich des Inhalts Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

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

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

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)

L?sung für PHP-Hinweis: Undefinierte Eigenschaft: L?sung für PHP-Hinweis: Undefinierte Eigenschaft: Jun 22, 2023 pm 02:48 PM

Beim Schreiben von Code in PHP kann es zu der Fehlermeldung ?Hinweis: Undefinierte Eigenschaft“ kommen. Dieser Fehler bedeutet, dass wir auf eine undefinierte Eigenschaft zugreifen, normalerweise weil die Eigenschaft im Code nicht initialisiert wurde. Wie kann man dieses Problem l?sen? Hier sind einige m?gliche L?sungen: Eigenschaften initialisieren Dies ist der einfachste Weg, dieses Problem zu l?sen. Durch die explizite Initialisierung einer Eigenschaft im Code wird sichergestellt, dass sie vor der Verwendung definiert wird. Zum Beispiel: Klasse

Was sind die Verwendungszwecke von Oracle Declare? Was sind die Verwendungszwecke von Oracle Declare? Sep 15, 2023 pm 01:12 PM

Die Verwendung der Oracle-Deklaration umfasst Variablendeklaration, Konstantendeklaration, Cursordeklaration und Unterprogrammdeklaration. Detaillierte Einführung: 1. Variablendeklaration, im PL/SQL-Block k?nnen Sie die DECLARE-Anweisung verwenden, um Variablen zu deklarieren. 2. Konstanten sind unver?nderliche Werte, die im PL/SQL-Block deklariert werden Die Abfrageergebnismenge wird im Block verarbeitet. 4. Subroutinendeklaration Eine Subroutine ist ein wiederverwendbarer Codeblock, der in einem PL/SQL-Block definiert ist.

PHP-Hinweis: Es wird versucht, die Eigenschaft eines Nicht-Objekts abzurufen – L?sung PHP-Hinweis: Es wird versucht, die Eigenschaft eines Nicht-Objekts abzurufen – L?sung Aug 17, 2023 am 09:27 AM

PHPNotice: Tryingtogetpropertyofnon-object-Solution W?hrend des PHP-Entwicklungsprozesses kann es zu einer h?ufigen Fehlermeldung kommen: Tryingtogetpropertyofnon-object (versucht, Eigenschaften von Nicht-Objekten abzurufen). Dieser Fehler wird normalerweise verursacht, wenn wir versuchen, auf eine Eigenschaft einer Variablen zuzugreifen (oder eine Methode aufzurufen), die kein Objekttyp ist. Dieser Artikel stellt Ihnen dies vor

PHP-Implementierungs-Framework: Zend Framework-Erste-Schritte-Tutorial PHP-Implementierungs-Framework: Zend Framework-Erste-Schritte-Tutorial Jun 19, 2023 am 08:09 AM

PHP-Implementierungsframework: ZendFramework-Einführungs-Tutorial ZendFramework ist ein von PHP entwickeltes und derzeit von ZendTechnologies verwaltetes Open-Source-Website-Framework, das das MVC-Designmuster übernimmt und eine Reihe wiederverwendbarer Codebibliotheken zur Implementierung von Web2.0-Anwendungen und Web Serve bereitstellt. ZendFramework ist bei PHP-Entwicklern sehr beliebt und gesch?tzt und bietet eine gro?e Auswahl an

So verwenden Sie ACL (Access Control List) zur Berechtigungskontrolle im Zend Framework So verwenden Sie ACL (Access Control List) zur Berechtigungskontrolle im Zend Framework Jul 29, 2023 am 09:24 AM

So verwenden Sie ACL (AccessControlList) zur Berechtigungskontrolle im Zend Framework. Einführung: In einer Webanwendung ist die Berechtigungskontrolle eine entscheidende Funktion. Es stellt sicher, dass Benutzer nur auf die Seiten und Funktionen zugreifen k?nnen, für die sie eine Zugriffsberechtigung haben, und verhindert unbefugten Zugriff. Das Zend-Framework bietet eine praktische M?glichkeit, die Berechtigungskontrolle mithilfe der ACL-Komponente (AccessControlList) zu implementieren. In diesem Artikel wird die Verwendung von ACL im Zend Framework vorgestellt

TypeError: Die Eigenschaft ?XXX' von null in Vue kann nicht gelesen werden. Was soll ich tun? TypeError: Die Eigenschaft ?XXX' von null in Vue kann nicht gelesen werden. Was soll ich tun? Nov 25, 2023 pm 01:21 PM

Vue ist ein beliebtes JavaScript-Framework zum Erstellen von Benutzeroberfl?chen. W?hrend des Entwicklungsprozesses k?nnen verschiedene Fehler und Ausnahmen auftreten. Einer der h?ufigsten Fehler ist ?TypeError:Cannotreadproperty'XXX'ofnull“. In diesem Artikel untersuchen wir die Ursachen dieses Fehlers und wie man ihn beheben kann. Lassen Sie uns zun?chst den Grund für diesen Fehler verstehen. Wenn wir versuchen, auf eine Eigenschaft oder Methode eines Objekts zuzugreifen, wenn das Paar

TypeError: Die Eigenschaft ?XXX' von undefiniert in Vue kann nicht gelesen werden. Was soll ich tun? TypeError: Die Eigenschaft ?XXX' von undefiniert in Vue kann nicht gelesen werden. Was soll ich tun? Nov 25, 2023 am 10:56 AM

TypeError:Cannotreadproperty'XXX'ofundefined in Vue, was soll ich tun? Bei Front-End-Entwicklern, die Vue zum Entwickeln verwenden, kann es w?hrend des Entwicklungsprozesses h?ufig zu TypeError:Cannotreadproperty'XXX'ofundefinierten Fehlern kommen. Dieser Fehler tritt normalerweise auf, wenn versucht wird, auf eine undefinierte Eigenschaft zuzugreifen. existieren

PHP erkennt ZendOptimizer nicht, wie kann man das l?sen? PHP erkennt ZendOptimizer nicht, wie kann man das l?sen? Mar 19, 2024 pm 01:09 PM

PHP erkennt ZendOptimizer nicht, wie kann man das l?sen? Bei der PHP-Entwicklung kann es manchmal vorkommen, dass PHP ZendOptimizer nicht erkennt, was dazu führt, dass einige PHP-Codes nicht ordnungsgem?? ausgeführt werden. In diesem Fall müssen wir einige Ma?nahmen ergreifen, um das Problem zu l?sen. Im Folgenden werden einige m?gliche Problemumgehungen zusammen mit spezifischen Codebeispielen beschrieben. 1. Best?tigen Sie, ob ZendOptimizer korrekt installiert ist: Zuerst müssen wir best?tigen, dass ZendOptimizer

See all articles