- Fixed bug #47769 (Strange extends PDO)

This commit is contained in:
Felipe Pena 2009-03-26 12:51:30 +00:00
parent 3b8a7eaff8
commit 35ddc72b28
2 changed files with 33 additions and 9 deletions

View File

@ -1342,8 +1342,7 @@ static union _zend_function *dbh_method_get(
lc_method_name = zend_u_str_tolower_dup(ztype, method_name, method_len);
if (zend_u_hash_find(&dbh->ce->function_table, ztype, lc_method_name,
method_len+1, (void**)&fbc) == FAILURE) {
if ((fbc = std_object_handlers.get_method(object_pp, method_name, method_len TSRMLS_CC)) == NULL) {
/* not a pre-defined method, nor a user-defined method; check
* the driver specific methods */
if (!dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH]) {
@ -1356,20 +1355,13 @@ static union _zend_function *dbh_method_get(
if (zend_u_hash_find(dbh->cls_methods[PDO_DBH_DRIVER_METHOD_KIND_DBH],
ztype, lc_method_name, method_len+1, (void**)&fbc) == FAILURE) {
if (!fbc) {
fbc = NULL;
}
goto out;
}
/* got it */
}
out:
if (!fbc && std_object_handlers.get_method) {
fbc = std_object_handlers.get_method(object_pp, method_name, method_len TSRMLS_CC);
}
pdo_zstr_efree(lc_method_name);
return fbc;
}

View File

@ -0,0 +1,32 @@
--TEST--
Bug #47769 (Strange extends PDO)
--FILE--
<?php
class test extends PDO
{
protected function isProtected() {
echo "this is a protected method.\n";
}
private function isPrivate() {
echo "this is a private method.\n";
}
public function quote($str, $paramtype = NULL) {
$this->isProtected();
$this->isPrivate();
print $str ."\n";
}
}
$test = new test('sqlite:memory');
$test->quote('foo');
$test->isProtected();
?>
--EXPECTF--
this is a protected method.
this is a private method.
foo
Fatal error: Call to protected method test::isProtected() from context '' in %s on line %d