Перегрузка методов в расширении

!Dron

Новичок
Добрый день!
Хотел спросить: если писать расширение на С++, то возможно создать перегрузку метода?
Пример (псевдокод), пусть расширение будет иметь метод:
Код:
someMethod(MyObject obj)
{
    do(obj->toString());
    ...
}
и
Код:
someMethod(string value)
{
    do(value);
    ...
}
Могу ли потом использовать этот перегруженный метод в коде PHP?
PHP:
$obj = new MyObject();
$string = 'some text';

$myExt = new ClassFromMyExtension();
...

$myExt->someMethod($obj);
$myExt->someMethod($string);
 

fixxxer

К.О.
Партнер клуба
И да, и нет.
С одной стороны, автоматически ты ничего подобного не получишь - в расширении ты будешь работать с zval-ами, да и никакой параметричнской перегрузки как таковой в php не бывает.
С другой стороны, если ты разберешься, как писать расширения, то поймешь, что не надо использовать С++-класс напрямую из php, и в итоге будешь делегировать вызовы к твоему С++-классу из кода расширения (где php-шный "класс" реализуется plain C макросами) - а вот там никто не мешает сделать в этом месте factory method, который будет из zval создавать string или MyObject и дальше уже вызывать метод с++-класса, таким образом фактически реализуя нужную тебе перегрузку.
 

fixxxer

К.О.
Партнер клуба
switch или вроде того, посмотри в исходниках, их никто не прячет
 

fixxxer

К.О.
Партнер клуба
Это ты сложный пример нашел, ищи, что делает pdo_stmt_setup_fetch_mode(INTERNAL_FUNCTION_PARAM_PASSTHRU...
 
Сверху