如何在php中调用swig包装的C方法中的引用


how to call references in C methods wrapped by swig in php

我在php代码中调用引用时遇到了严重问题。我用swig包装了我的c++类,并想调用该方法,在阅读了手册后,我发现,在swig中,当c++参数中有引用时,我们有:

class foo {
Public;
double bar(double &a);
}

在swig包装类中,我们有:

double foo_bar(foo *obj,double *a) {
obj->bar(*a);}

我完全理解,我的问题是如何在PHP代码中调用方法栏?我从开始

$ptr_a = &$a
$obj->bar($ptr_a);

但它不起作用。知道吗???

我尝试使用phppointers.I和REF类型映射来创建使用PHP引用概念的东西。我无法做到这一点,但使用cpointer处理此类问题的标准、语言中立的SWIG方法。我做得很好:

%module test
%include <cpointer.i>
%pointer_class(double,Double);
%inline %{
  void func(double& a) {
    a = -666.0;
  }
%}

按预期与合作

<?php
include('test.php');
echo "testing'n";
$a=new Double(0.0);
test::func($a);
echo "In PHP: " . $a->value() . "'n";
?>