Цитата (AlmazDelDiablo @ 23.05.2013 - 10:52) |
protected — метод доступ для самого класса и всех его наследников, но не доступен из-вне. private — метод доступен только для самого класса. Это не у PHP проблемы, а у вас и ваших коллег пробелы в знаниях и умении гуглить. Извините. |
Цитата (Игорь_Vasinsky @ 23.05.2013 - 15:53) |
А1 и А2 - наследники А, с какого перепуга они получать доступ к защищённым методам друг друга |
<?php
class A
{
protected function testProtect(){}
}
class A1 extends A
{
protected function testProtect()
{
return print ('Foo');
}
}
class A2 extends A
{
public function test()
{
$b = new A1();
$b->testProtect();
}
}
$qwe = new A2();
$qwe->test(); //Foo
Цитата |
Про это и тема. С какого перепуга A2 может вызвать метод A1 |
Цитата (Игорь_Vasinsky @ 23.05.2013 - 16:03) |
это код просто размещён в методе класса A2 а на сам деле ты этот метод дёргаешь из A1 - который его наследует у А |
Цитата |
ещё раз. защищённый метод вызван у родителя. $a1 = new A1(); - extends A $a1->testA(); - унаследованный родительский метод в класса A1 $a1 - это экземпляр класса A1 - он может видеть protected методы у родителя Тебя сбило то что ты в левом классе создал экземпляр второго класса и из него выдернул метод первого класса. ты хоть в пятом классе работай - ты работаешь с экземпляром 2го класса |
Цитата |
это код просто размещён в методе класса A2 а на сам деле ты этот метод дёргаешь из A1 - который его наследует у А |
Снаружи::test():lol: :lol:
Цитата (Guest @ 23.05.2013 - 16:14) |
Если A2 не наследовать от A, то просто размещенный код перестает работать. |
<?php
class Base
{
private $_content;
public function getContent()
{
return $this->_content;
}
protected function setContent($content)
{
$this->_content = $content;
}
}
class Foo extends Base
{
public function setFoo()
{
$this->setContent('Foo'); // я ни чего не имею против этого.
}
}
class Bar extends Base
{
public function setBar(Foo $foo)
{
$this->setContent('Bar'); // и против этого тоже ни чего не имею.
$foo->setContent('Bar'); // но вот это на мой взгляд дикость какая то))
}
}
$foo = new Foo();
$foo->setFoo();
$bar = new Bar();
$bar->setBar($foo);
echo $foo->getContent(); //Bar
echo $bar->getContent(); //Bar
?>