summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJasperVanEck <jaspergkurtz@gmail.com>2013-12-02 12:28:32 +0100
committerJasperVanEck <jaspergkurtz@gmail.com>2013-12-02 12:28:32 +0100
commit040f493080df2787557b891713d5f851ac78cae6 (patch)
tree00a848964c7191a18fa3d1af4042866c1edf18e7
parentc97224558d022b5698fb000018f910f2499df1b4 (diff)
isCallable now works
-rw-r--r--Examples/CallPhpFunctions/callphpfunction.cpp9
-rw-r--r--Examples/CallPhpFunctions/callphpfunction.php12
-rwxr-xr-xsrc/libphpcpp.sobin137206 -> 137255 bytes
-rw-r--r--src/value.cpp9
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 &params)
{
- //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
index baef04f..ed993df 100755
--- a/src/libphpcpp.so
+++ b/src/libphpcpp.so
Binary files differ
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);
}