簡體   English   中英

如何在PHP擴展類中設置靜態類屬性?

[英]How do I set a static class property in a PHP extension class?

我正在用C編寫一個PHP擴展,其中包括用C定義的PHP類。我想在其中一個類上設置靜態屬性。 特別是,我想用C做相當於

class Example{
  public static $member;
}

Example::member = new Example();

我不能使用REGISTER_*_CONSTANT宏來執行此操作,因為該值必須是一個對象。 我檢查了官方文檔,但有關類的部分為空。

您實際上不能注冊靜態屬性,而只需要更新它,然后讓PHP為您注冊即可。

http://php.undmedlibrary.org/manual/en/zend-api.zend-update-static-property.php

// int zend_update_static_property         ( zend_class_entry* $scope, char* $name, int $name_length, zval* $value,        magic $TSRMLS_DC )
int prop_set = zend_update_static_property ( my_example_class_entry,   "member",    7,                my_instance          TSRMLS_CC);

在我的特定情況下,我的類包裝了C結構,因此我顯然無法在模塊初始化時對其進行初始化。 我采取了下一個最佳選擇,那就是聲明一個靜態方法,該方法返回一個靜態聲明的實例。 我這樣做是為了

PHP_ME(Example, member, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_STATIC)

在我的example_methods數組中,通過在我的頭文件中全局聲明zval *php_example_static_member ,並將函數編寫為

PHP_METHOD(Example, member){
  if(php_example_static_member == NULL){
    php_example_static_member = create_example_instance(); //However the new instance is created
  }
  RETURN_ZVAL(php_example_static_member, false, false);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM