dron4ik
23.05.2013 - 15:16
Guest
Читаем внимательно
Цитата |
protected — метод доступ для самого класса и всех его наследников, но не доступен из-вне. |
ну так и не нужно из вне его трогать... а с дочернего, почему бы и нет?
_____________
Ex3m.com.ua — Активный образ жизни
dron4ikA1 не является ни дочерним ни родительским классом по отношению к A2
<?php
class Base
{
protected function testProtect()
{
return print ('Base');
}
}
class Foo extends Base
{
protected function testProtect()
{
return print ('Foo');
}
}
class Bar extends Base
{
public function test()
{
$b = new Foo();
$b->testProtect();
}
}
$qwe = new Bar();
$qwe->test();
Игорь_Vasinsky
23.05.2013 - 15:24
Цитата |
class Foo extends Base { protected function testProtect() { return print ('Foo'); } } |
ну ты же сам переназначил testProtect()
смысл наследования - не только в передачи методов, но и в возможности манипулировать ими
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
23.05.2013 - 15:30
Цитата |
A1 не является ни дочерним ни родительским классом по отношению к A2 |
да, но он наследник класса A - владелец защищённого метода -вызов которого тебя так удивил
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
23.05.2013 - 15:35
..и всё.... даже скучно стало
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
AlmazDelDiablo
23.05.2013 - 15:36
Цитата (Игорь_Vasinsky @ 23.05.2013 - 16:35) |
..и всё.... даже скучно стало |
offtop
Мне кажется, они уверовали в нашу непонятливость и глупость, сказали начальнику, что PHP говно и продолжили кодить на C#.
_____________
Блог |
VK |
GitHub |
Twitch
Цитата (Игорь_Vasinsky @ 23.05.2013 - 15:30) |
да, но он наследник класса A - владелец защищённого метода -вызов которого тебя так удивил |
В коде не происходит вызова метода класса A
dron4ik
23.05.2013 - 15:39
Guestпроисходит... через дочерний класс А1
_____________
Ex3m.com.ua — Активный образ жизни
Ошибка, в коде автора происходит вызов A, в моём методы класса Base не вызываются
Игорь_Vasinsky
23.05.2013 - 15:41
Гость - ты кто?
мы какой код обсуждаем?
я написал про твой, потом ответил на вопрос по первому коду
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
23.05.2013 - 15:42
Цитата |
Цитата (Игорь_Vasinsky @ 23.05.2013 - 15:30) да, но он наследник класса A - владелец защищённого метода -вызов которого тебя так удивил
В коде не происходит вызова метода класса A |
$a1->testA() - а это кто?
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Цитата (Игорь_Vasinsky @ 23.05.2013 - 15:30) |
да, но он наследник класса A - владелец защищённого метода -вызов которого тебя так удивил |
Т.е. если A1 и A2 наследуются от общего A, то они должны иметь права вызывать любые protected методы из A1, A2 и A?
keeper_evil
23.05.2013 - 15:52
Цитата (Guest @ 23.05.2013 - 15:21) |
dron4ik A1 не является ни дочерним ни родительским классом по отношению к A2
<?php class Base { protected function testProtect() { return print ('Base'); } }
class Foo extends Base { protected function testProtect() { return print ('Foo'); } }
class Bar extends Base { public function test() { $b = new Foo(); $b->testProtect(); } }
$qwe = new Bar(); $qwe->test(); |
Человек меня понимает.
Можно еще это переписать вот так:
<?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();
echo $bar->getContent();
?>
Что тут не так? Да то, что мы переопределили защищенным методом приватную переменную $_content экземпляра класса Foo вне тела этого класса в теле класса Bar, который не является потомком класса Foo.
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.