Ich möchte, dass meine PHP-Erweiterung eine Klasse entspricht dem folgenden PHP deklarieren:Wie füge ich ein Array als eine Objekteigenschaft zu einer Klasse hinzu, die in einer PHP-Erweiterung deklariert wird?
class MyClass
{
public $MyMemberArray;
__construct()
{
$this->MyMemberArray = array();
}
}
Ich verfolge die Beispiele in „Advanced PHP Programming“ und „Extending and Embedding PHP“ und ich bin in der Lage, eine Klasse zu deklarieren, die integer hat Eigenschaften in PHP_MINIT_FUNCTION
.
Allerdings, wenn ich den gleichen Ansatz verwenden, um eine Array-Eigenschaft in PHP_MINIT_FUNCTION
zu erklären, erhalte ich die folgende Fehlermeldung zur Laufzeit:
PHP Fatal error: Internal zval's can't be arrays, objects or resources in Unknown on line 0
ein Beispiel auf Seite 557 von Advanced PHP-Programmierung, wie es ist, zu erklären, Ein Konstruktor, der eine Array-Eigenschaft erstellt, aber der Beispielcode wird nicht kompiliert (das zweite "Objekt" scheint redundant zu sein).
fixierte ich den Fehler und angepasst es meinen Code:
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);
}
Und das kompiliert, aber es gibt den gleichen Laufzeitfehler auf dem Bau.
aber wissen Sie, warum dies ist die Antwort? Was ist die Begründung? –
Die Argumentation hat damit zu tun, wie ein Zval erstellt wird. Es ist eine langwierige Erklärung, vertrau mir. – markzz