[英]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.