|
|
|
| Подскажите пожалуйста, приведённый ниже код выводит 1. Вопрос почему, и как вывести то, что прописано в классе t2 (т.е. что б вывести 2) ?
<?php
class t1 {
private function t() {
echo "1";
}
public function run() {
$this->t();
}
}
class t2 extends t1 {
private function t() {
echo "2";
}
}
$t = new t2();
$t->run();
?>
|
| |
|
|
|
|
|
|
|
для: serenya1983
(08.11.2013 в 14:52)
| | В таком виде - никак. t2::t() никак не доступен ниоткуда, кроме методов класса t2 и его потомков. А их нет. | |
|
|
|
|
|
|
|
для: Sfinks
(08.11.2013 в 21:12)
| | и даже не для потомков в случае их наличия | |
|
|
|
|
|
|
|
для: serenya1983
(08.11.2013 в 14:52)
| | потому что ключевое слово private определяет область видимости только внутри класса. Расширяя t1, классу t2 не видно метода t() родителя, а общедоступный run() найдет только внутри своего класса метод t().
а что б вывести 2 надо оба метода t() обозначить как public - в этом случае при расширении сработает переопределение методов | |
|
|
|
|
|
|
|
для: serenya1983
(08.11.2013 в 14:52)
| | > Вопрос почему
Модификатор private (закрытый) ограничивает область видимости так, что только класс, где объявлен сам элемент, имеет к нему доступ.
> и как
Модификатор protected (защищенный) разрешает доступ наследуемым и родительским классам | |
|
|
|