я чего-то недопонимаю в ООП?

AndreyKl

Новичок
я чего-то недопонимаю в ООП?

вот код... ниже результат. Довольно неожиданный, на мой взгляд.. кто-нибудь, поясните пжл. почему при вызове протектед и приват методов всё работает как "так и надо" ? Я чего-то недопонимаю?

PHP:
class P1 {
	private $_sName;
	private $_aPar;

	private function _privateMethod() {
		echo "called _privateMethod, name is {$this->_sName}<br>";
	}
		
	protected function protectedMethod() {
		echo "called protectedMethod, name is {$this->_sName}<br>";
	}
	
	public function __construct( $_sName ) {
		echo "Called constructor with name $_sName<br>";
		$this->_sName = $_sName;
		if( $this->_sName !== 'parent' ) {
			$this->_aPar = new P1( 'parent' );
		}
	}
	
	public function publicMethod() {
		echo "called publicMethod, className is {$this->_sName}<br>";
		if( $this->_sName !== 'parent' ) {
			$this->_aPar->protectedMethod();
			$this->_aPar->_privateMethod();
		}
	}
	
}

$anO = new P1( 'child' );
$anO->publicMethod();
Called constructor with name child
Called constructor with name parent
called publicMethod, className is child
called protectedMethod, name is parent
called _privateMethod, name is parent
 

tony2001

TeaM PHPClub
а что тут непонятного?
ты зачем-то перепутал местами 'child' и 'parent'.
 

AndreyKl

Новичок
я не перепутал. ну да ладно... поменяй местами...какая разница?

непонятно, как в методе одного объекта можно вызвать закрытый метод другого? Ведь закрытый метод может использовать только сам объект.. вроде?

-~{}~ 01.05.07 02:52:

Вопрос снят. Всё верно.. ведь метод принадлежит классу, а не объекту и вызывается из контекста класса..


ЗЫ. Я не путал чаилд и парент, такая задумка )
 

whirlwind

TDD infected, paranoid
Спецификатор доступа по отношению к классу, а не к объекту
 
Сверху