Heim > Artikel > Backend-Entwicklung > Entwicklungshinweise zur PHP-Erweiterung (3) Definition des statischen Array-Attributs der Klasse
<code><span><span>class</span><span>Slash_Log</span> {</span><span>const</span> EMERGENCY = <span>1</span>; <span>const</span> ALERT = <span>2</span>; <span>const</span> CRITICAL = <span>3</span>; <span>const</span> FATAL = <span>3</span>; <span>const</span> ERROR = <span>4</span>; <span>const</span> WARN = <span>5</span>; <span>const</span> NOTICE = <span>6</span>; <span>const</span> INFO = <span>7</span>; <span>const</span> DEBUG = <span>8</span>; <span>public</span><span>static</span><span>$levels</span> = <span>array</span>( <span>self</span>::EMERGENCY => <span>1</span>, <span>self</span>::ALERT => <span>2</span>, <span>self</span>::CRITICAL => <span>3</span>, <span>self</span>::FATAL => <span>3</span>, <span>self</span>::ERROR => <span>4</span>, <span>self</span>::WARN => <span>5</span>, <span>self</span>::NOTICE => <span>6</span>, <span>self</span>::INFO => <span>7</span>, <span>self</span>::DEBUG => <span>8</span>, ); }</code>
<code>zend_class_entry ce; SLASH_INIT_CLASS_ENTRY(ce, SLASH_CN_LOG, slash_log_methods); slash_log_ce = zend_register_internal_class(&ce TSRMLS_CC); <span>// {{{ log level</span> zend_declare_class_constant_long(slash_log_ce, ZEND_STRL(SL_EMERGENCY_K), SL_EMERGENCY_V TSRMLS_CC); zend_declare_class_constant_long(slash_log_ce, ZEND_STRL(SL_ALERT_K), SL_ALERT_V TSRMLS_CC); zend_declare_class_constant_long(slash_log_ce, ZEND_STRL(SL_CRITICAL_K), SL_CRITICAL_V TSRMLS_CC); zend_declare_class_constant_long(slash_log_ce, ZEND_STRL(SL_ERROR_K), SL_ERROR_V TSRMLS_CC); zend_declare_class_constant_long(slash_log_ce, ZEND_STRL(SL_WARN_K), SL_WARN_V TSRMLS_CC); zend_declare_class_constant_long(slash_log_ce, ZEND_STRL(SL_NOTICE_K), SL_NOTICE_V TSRMLS_CC); zend_declare_class_constant_long(slash_log_ce, ZEND_STRL(SL_INFO_K), SL_INFO_V TSRMLS_CC); zend_declare_class_constant_long(slash_log_ce, ZEND_STRL(SL_DEBUG_K), SL_DEBUG_V TSRMLS_CC); <span>// }}}</span><span>// {{{ static property array</span> zend_declare_property_null(slash_log_ce, ZEND_STRL(SL_P_LEVELS), ZEND_ACC_PUBLIC|ZEND_ACC_STATIC TSRMLS_CC); zval *levels; MAKE_STD_ZVAL(levels); array_init(levels); add_index_stringl(levels, SL_EMERGENCY_V, ZEND_STRL(SL_EMERGENCY_K), <span>0</span>); add_index_stringl(levels, SL_ALERT_V, ZEND_STRL(SL_ALERT_K), <span>0</span>); add_index_stringl(levels, SL_CRITICAL_V, ZEND_STRL(SL_CRITICAL_K), <span>0</span>); add_index_stringl(levels, SL_ERROR_V, ZEND_STRL(SL_ERROR_K), <span>0</span>); add_index_stringl(levels, SL_WARN_V, ZEND_STRL(SL_WARN_K), <span>0</span>); add_index_stringl(levels, SL_NOTICE_V, ZEND_STRL(SL_NOTICE_K), <span>0</span>); add_index_stringl(levels, SL_INFO_V, ZEND_STRL(SL_INFO_K), <span>0</span>); add_index_stringl(levels, SL_DEBUG_V, ZEND_STRL(SL_DEBUG_K), <span>0</span>); zend_update_static_property(slash_log_ce, ZEND_STRL(SL_P_LEVELS), levels TSRMLS_CC); <span>// }}}</span></code>
Weil es in Anmerkung (1) Erweiterungen steht Array-Eigenschaften können nicht direkt initialisiert werden. Daher definieren wir hier eine statische Eigenschaft, die auf Null initialisiert wird (zend_declare_property_null), und ändern (zend_update_static_property) dann den Wert dieser Eigenschaft in das entsprechende Array, um den Effekt eines öffentlichen statischen $array zu erzielen.
Für den entsprechenden Variablennamen ist ein Makro definiert. Wenn Sie den Code also direkt kopieren, wird er nicht kompiliert. Willkommen zur Kommunikation
Das Obige stellt die Definition des statischen Array-Attributs der PHP-Erweiterungsentwicklungsnotizen (3)-Klasse vor, einschließlich des relevanten Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die an PHP-Tutorials interessiert sind.