summaryrefslogtreecommitdiff
path: root/ext
diff options
context:
space:
mode:
authorDavid Soria Parra <dsp@php.net>2007-12-30 17:59:31 +0000
committerDavid Soria Parra <dsp@php.net>2007-12-30 17:59:31 +0000
commite81a660bae574337a87ad206c9094a935efa9b8e (patch)
tree6e7410b2404277653b8e4df1fde47cd048a164d0 /ext
parent3b2ca906998ce6a5bf572f1534fc177b65dc9844 (diff)
downloadphp-git-e81a660bae574337a87ad206c9094a935efa9b8e.tar.gz
- Fixed bug #43663 (Extending PDO class with a __call() function doesn't work).
Diffstat (limited to 'ext')
-rwxr-xr-xext/pdo/pdo_dbh.c10
-rw-r--r--ext/pdo/tests/bug_43663.phpt23
2 files changed, 31 insertions, 2 deletions
diff --git a/ext/pdo/pdo_dbh.c b/ext/pdo/pdo_dbh.c
index ff65aeb7f8..3781b9f961 100755
--- a/ext/pdo/pdo_dbh.c
+++ b/ext/pdo/pdo_dbh.c
@@ -1273,12 +1273,18 @@ static union _zend_function *dbh_method_get(
if (zend_hash_find(dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH],
lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
- fbc = NULL;
+ if (std_object_handlers.get_method) {
+ fbc = std_object_handlers.get_method(object_pp, lc_method_name, method_len TSRMLS_CC);
+ }
+ if (!fbc) {
+ fbc = NULL;
+ }
+
goto out;
}
/* got it */
}
-
+
out:
efree(lc_method_name);
return fbc;
diff --git a/ext/pdo/tests/bug_43663.phpt b/ext/pdo/tests/bug_43663.phpt
new file mode 100644
index 0000000000..25af588bbe
--- /dev/null
+++ b/ext/pdo/tests/bug_43663.phpt
@@ -0,0 +1,23 @@
+--TEST--
+PDO Common: Bug #43663 (__call on classes derived from PDO)
+--FILE--
+--SKIPIF--
+<?php # vim:ft=php
+if (!extension_loaded('pdo')) die('skip');
+?>
+--FILE--
+<?php
+class test extends PDO{
+ function __call($name, array $args) {
+ echo "Called $name in ".__CLASS__."\n";
+ }
+ function foo() {
+ echo "Called foo in ".__CLASS__."\n";
+ }
+}
+$a = new test('sqlite::memory:');
+$a->foo();
+$a->bar();
+--EXPECT--
+Called foo in test
+Called bar in test