<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 11.2 PHP中的面向對象(二) # 11.2 PHP中的面向對象(二) 在上一節里我們已經看了下如何操作一個對象的方法,這一節主要描述與對象屬性有關的東西。有關如何對它進行定義的操作我們已經在上一章中描述過了,這里不再敘述,只講對其的操作。 ## 讀取對象的屬性 ``` ZEND_API zval *zend_read_property(zend_class_entry *scope, zval *object, char *name, int name_length, zend_bool silent TSRMLS_DC); ZEND_API zval *zend_read_static_property(zend_class_entry *scope, char *name, int name_length, zend_bool silent TSRMLS_DC); ``` zend\_read\_property函數用于讀取對象的屬性,而zend\_read\_static\_property則用于讀取靜態屬性。可以看出,靜態屬性是直接保存在類上的,與具體的對象無關。 silent參數: - 0: 如果屬性不存在,則拋出一個notice錯誤。 - 1: 如果屬性不存在,不報錯。 如果所查的屬性不存在,那么此函數將返回IS\_NULL類型的zval。### 更新對象的屬性 ``` ZEND_API void zend_update_property(zend_class_entry *scope, zval *object, char *name, int name_length, zval *value TSRMLS_DC); ZEND_API int zend_update_static_property(zend_class_entry *scope, char *name, int name_length, zval *value TSRMLS_DC); ``` zend\_update\_property用來更新對象的屬性,zend\_update\_static\_property用來更新類的靜態屬性。如果對象或者類中沒有相關的屬性,函數將自動的添加上。 ### 讀寫對象與類屬性的實例 假設我們已經在擴展中定義好下面的類: ``` class baby { public $age; public static $area; public function __construct($age, $area) { $this->age = $age; self::$area = $area; var_dump($this->age, self::$area); } } ZEND_METHOD(baby, __construct) { zval *age, *area; zend_class_entry *ce; ce = Z_OBJCE_P(getThis()); if( zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", &age, &area) == FAILURE ) { printf("Error\n"); RETURN_NULL(); } zend_update_property(ce, getThis(), "age", sizeof("age")-1, age TSRMLS_CC); zend_update_static_property(ce, "area", sizeof("area")-1, area TSRMLS_CC); age = NULL; area = NULL; age = zend_read_property(ce, getThis(), "age", sizeof("age")-1, 0 TSRMLS_DC); php_var_dump(&age, 1 TSRMLS_CC); area = zend_read_static_property(ce, "area", sizeof("area")-1, 0 TSRMLS_DC); php_var_dump(&area, 1 TSRMLS_CC); } //為類添加age 和 area屬性 PHP_MINIT_FUNCTION(say_hello) { zend_class_entry ce; INIT_CLASS_ENTRY(ce,"baby",myclass_method); baby_ce = zend_register_internal_class(&ce TSRMLS_CC); zend_declare_property_null(baby_ce, "age", strlen("age"), ZEND_ACC_PUBLIC TSRMLS_CC); zend_declare_property_null(baby_ce, "area", strlen("area"), ZEND_ACC_STATIC|ZEND_ACC_PUBLIC TSRMLS_CC); return SUCCESS; } ``` 感謝 \[@看你取的破名\](http://weibo.com/taokuizu) 發現的錯誤。 ### 一些其它的快捷函數 #### 更新對象與類的屬性 ``` ZEND_API void zend_update_property_null(zend_class_entry *scope, zval *object, char *name, int name_length TSRMLS_DC); ZEND_API void zend_update_property_bool(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC); ZEND_API void zend_update_property_long(zend_class_entry *scope, zval *object, char *name, int name_length, long value TSRMLS_DC); ZEND_API void zend_update_property_double(zend_class_entry *scope, zval *object, char *name, int name_length, double value TSRMLS_DC); ZEND_API void zend_update_property_string(zend_class_entry *scope, zval *object, char *name, int name_length, const char *value TSRMLS_DC); ZEND_API void zend_update_property_stringl(zend_class_entry *scope, zval *object, char *name, int name_length, const char *value, int value_length TSRMLS_DC); ZEND_API int zend_update_static_property_null(zend_class_entry *scope, char *name, int name_length TSRMLS_DC); ZEND_API int zend_update_static_property_bool(zend_class_entry *scope, char *name, int name_length, long value TSRMLS_DC); ZEND_API int zend_update_static_property_long(zend_class_entry *scope, char *name, int name_length, long value TSRMLS_DC); ZEND_API int zend_update_static_property_double(zend_class_entry *scope, char *name, int name_length, double value TSRMLS_DC); ZEND_API int zend_update_static_property_string(zend_class_entry *scope, char *name, int name_length, const char *value TSRMLS_DC); ZEND_API int zend_update_static_property_stringl(zend_class_entry *scope, char *name, int name_length, const char *value, int value_length TSRMLS_DC); ``` ## links - 11.1 [生成對象的實例](11.1.html) - 11.3 [小結](11.3.html)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看