Преобразовать Php :: Object обратно в объект C ++ в PHP-CPP?

Я пытался сделать Bencode расширение для PHP PHP-CPP, поэтому было несколько классов, таких как:

class BItem : public Php::Base {
public:
virtual std::string getType() const {
return "BItem";
}
};

class BDict : public BItem {
public:
std::unordered_map<std::string, BItem*> BData;

std::string getType() const {
return "BDict";
}

Php::Value getItem(Php::Parameters &params) {
std::string key = params[0];
...
...
return Php::Object(...);
}

// PHP: $a = new BDict(); $b = new BDict(); $a->addItem($b);
void addItem(Php::Parameters &params) {
std::string key = params[0];

/**
* Here's the part confusing me
* Is there something like:
*/
BItem *toInsert = &params[1]; // However, params[1] is actually a Php::Object
BData.insert({key, toInsert});
}
};

class BStr : public BItem {...};
class BList : public BItem {...};
class BInt : public BItem {...};

Все типы кроме BItem может быть вставлен в BDict,

Поэтому после создания экземпляра одного из них, как я могу передать его обратно в часть C ++, «преобразовать» его обратно в объект C ++ и, наконец, вставить его в BData?

Я новичок в расширениях PHP, и любая помощь или подсказка будет принята с благодарностью.

1

Решение

В соответствии с Эмиэль ответ

void myFunction(Php::Parameters &params)
{
// store the first parameter in a variable
Php::Value object = params[0];

// we want to be 100% sure that the passed in parameter is indeed one of our own objects
if (!object.instanceOf("MySpecialClass")) throw Php::Exception("Wrong parameter passed");

// cast the PHP object back into a C++ class
MySpecialClass *cppobject = (MySpecialClass *)object.implementation();

// @todo add your own code
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]