Req #40840 [Opn->Wfx]: Derived class cant call its private method from the context of its base class

From: Date: Thu, 05 May 2016 11:49:15 +0000
Subject: Req #40840 [Opn->Wfx]: Derived class cant call its private method from the context of its base class
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-200913@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=40840&edit=1

 ID:                 40840
 Updated by:         nikic@php.net
 Reported by:        davcha at nordnet dot fr
 Summary:            Derived class cant call its private method from the
                     context of its base class
-Status:             Open
+Status:             Wont fix
 Type:               Feature/Change Request
-Package:            Feature/Change Request
+Package:            *General Issues
 Operating System:   Windows XP SP2
 PHP Version:        5.2.1
 Block user comment: N
 Private report:     N

 New Comment:

The whole point of "private" is that access is only possible from within the class that
declares the method (the usual loopholes using reflection and closure rebinding notwithstanding).
This is definitely not going to change.

Also [citation needed] on your claim that other languages allow what you suggest, because I'm
pretty sure they don't.


Previous Comments:
------------------------------------------------------------------------
[2007-03-17 00:22:47] davcha at nordnet dot fr

How about this :

<?php
class BaseClass {
	protected function A($f){
		var_dump($this);
		$this->$f();
	}
}

class SubClass extends BaseClass {
	private function B(){
		echo 'hello, i dont show !';
	}
	public function C(){
		$this->A('B');
	}
}

$b = new SubClass();
$b->C('B');
?>

In this case, i'm calling SubClass:B() from SubClass context. At least, that's how it
should work : that's how it works in C, C#, etc...

In PHP 5.2.1 i'm still getting the same fatal error.

------------------------------------------------------------------------
[2007-03-16 23:58:53] johannes@php.net

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to
report
a bug at http://bugs.php.net/how-to-report.php

You are calling a method from SubClass out of the BaseClass context.

------------------------------------------------------------------------
[2007-03-16 23:25:32] davcha at nordnet dot fr

Description:
------------
A derived class 'SubClass' cannot call a private method declared into 'SubClass'
from the context of its parent class 'BaseClass'.

However, even if the private method is called from 'BaseClass', dumping the variable $this
shows the current class type is 'SubClass'.

Reproduce code:
---------------
<?php
class BaseClass {
	public function A($f){
		var_dump($this);
		$this->$f();
	}
}

class SubClass extends BaseClass {
	private function B(){
		echo 'hello, i dont show !';
	}
}

$b = new SubClass();
$b->A('B');
?>

Expected result:
----------------
object(SubClass)#1 (0) { } hello, i dont show !

Actual result:
--------------
object(SubClass)#1 (0) { }
Fatal error: Call to private method SubClass::B() from context 'BaseClass' in
C:\httpd\htdocs\pwidgets\test2.php on line 5



------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=40840&edit=1


Thread (4 messages)

« previous php.bugs (#200913) next »