diff options
author | JasperVanEck <jaspergkurtz@gmail.com> | 2013-12-02 12:28:32 +0100 |
---|---|---|
committer | JasperVanEck <jaspergkurtz@gmail.com> | 2013-12-02 12:28:32 +0100 |
commit | 040f493080df2787557b891713d5f851ac78cae6 (patch) | |
tree | 00a848964c7191a18fa3d1af4042866c1edf18e7 | |
parent | c97224558d022b5698fb000018f910f2499df1b4 (diff) |
isCallable now works
-rw-r--r-- | Examples/CallPhpFunctions/callphpfunction.cpp | 9 | ||||
-rw-r--r-- | Examples/CallPhpFunctions/callphpfunction.php | 12 | ||||
-rwxr-xr-x | src/libphpcpp.so | bin | 137206 -> 137255 bytes | |||
-rw-r--r-- | src/value.cpp | 9 |
4 files changed, 22 insertions, 8 deletions
diff --git a/Examples/CallPhpFunctions/callphpfunction.cpp b/Examples/CallPhpFunctions/callphpfunction.cpp index db443ea..8f212f8 100644 --- a/Examples/CallPhpFunctions/callphpfunction.cpp +++ b/Examples/CallPhpFunctions/callphpfunction.cpp @@ -24,8 +24,10 @@ using namespace std; */ Php::Value call_php_function(Php::Parameters ¶ms) { - //if (!params[0].isCallable()) throw Php::Exception("Not a callable type."); - + // check whether the parameter is callable + if (!params[0].isCallable()) throw Php::Exception("Not a callable type."); + + // perform the callback return params[0](1,2,3); } @@ -41,7 +43,8 @@ extern "C" // add function to extension extension.add("call_php_function", call_php_function, { - Php::ByVal("addFunc", Php::callableType) + Php::ByVal("addFunc", Php::callableType), + Php::ByVal("x", Php::numericType) }); // return the extension module diff --git a/Examples/CallPhpFunctions/callphpfunction.php b/Examples/CallPhpFunctions/callphpfunction.php index 26f161c..ae3cf81 100644 --- a/Examples/CallPhpFunctions/callphpfunction.php +++ b/Examples/CallPhpFunctions/callphpfunction.php @@ -6,11 +6,13 @@ * An example file to show the working of a php function call in C++. */ -/* - * Run the function with the given name. As you can see, the given name - * can be different from the actual function name. +/** + * Call a C++ function with a callable PHP function as its parameter. + * The PHP function is then executed from the C++ code. + * The PHP function is this case, adds three numbers. */ $result = call_php_function(function($a, $b, $c){ - return $a + $b + $c; + return $a + $b + $c; }); -echo $result; +// print the result +echo $result . "\n"; diff --git a/src/libphpcpp.so b/src/libphpcpp.so Binary files differindex baef04f..ed993df 100755 --- a/src/libphpcpp.so +++ b/src/libphpcpp.so diff --git a/src/value.cpp b/src/value.cpp index 9d382f1..603508e 100644 --- a/src/value.cpp +++ b/src/value.cpp @@ -789,6 +789,15 @@ Value Value::exec(int argc, zval ***params) */ Type Value::type() const { + // When the type should be a callable Z_TYPE_P returns objectType + // To circumvent this, we check whether _val is callable + char *func_name; + if(zend_is_callable(_val, 0, &func_name)) + { + return callableType; + } + + // return regular type return (Type)Z_TYPE_P(_val); } |