2009-07-09 32 views
4

我希望我的PHP擴展來聲明相當於一個類下面的PHP:如何將一個數組作爲對象屬性添加到在PHP擴展中聲明的類中?

class MyClass 
{ 
    public $MyMemberArray; 

    __construct() 
    { 
     $this->MyMemberArray = array(); 
    } 
} 

我按照「Advanced PHP Programming」的例子,「Extending and Embedding PHP」和我能夠聲明具有整數類物業PHP_MINIT_FUNCTION

然而,當我用同樣的方式在PHP_MINIT_FUNCTION聲明數組屬性,我會在運行時出現以下錯誤信息:

PHP Fatal error: Internal zval's can't be arrays, objects or resources in Unknown on line 0 

有如何申報高級PHP編程的557頁上的示例一個創建數組屬性的構造函數,但示例代碼不能編譯(第二個「對象」似乎是多餘的)。

我固定的bug,它適用於我的代碼:

PHP_METHOD(MyClass, __construct) 
{ 
    zval *myarray; 
    zval *pThis; 

    pThis = getThis(); 

    MAKE_STD_ZVAL(myarray); 

    array_init(myarray); 
    zend_declare_property(Z_OBJCE_P(pThis), "MyMemberArray", sizeof("MyMemberArray"), myarray, ZEND_ACC_PUBLIC TSRMLS_DC); 
} 

這編譯,但它給施工同一運行時錯誤。

回答

6

答案是在構造函數中使用add_property_zval_ex(),而不是zend_declare_property()

如預期以下工作:

​​
+0

但你知道爲什麼是這樣的答案嗎?什麼是推理? – 2016-06-19 18:25:53

相關問題