Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: class override function
 
 автор: serenya1983   (08.11.2013 в 14:52)   письмо автору
 
 

Подскажите пожалуйста, приведённый ниже код выводит 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();
?>

  Ответить  
 
 автор: Sfinks   (08.11.2013 в 21:12)   письмо автору
 
   для: serenya1983   (08.11.2013 в 14:52)
 

В таком виде - никак. t2::t() никак не доступен ниоткуда, кроме методов класса t2 и его потомков. А их нет.

  Ответить  
 
 автор: Jackson   (10.11.2013 в 00:51)   письмо автору
 
   для: Sfinks   (08.11.2013 в 21:12)
 

и даже не для потомков в случае их наличия

  Ответить  
 
 автор: Jackson   (10.11.2013 в 00:56)   письмо автору
 
   для: serenya1983   (08.11.2013 в 14:52)
 

потому что ключевое слово private определяет область видимости только внутри класса. Расширяя t1, классу t2 не видно метода t() родителя, а общедоступный run() найдет только внутри своего класса метод t().

а что б вывести 2 надо оба метода t() обозначить как public - в этом случае при расширении сработает переопределение методов

  Ответить  
 
 автор: Igorek   (11.11.2013 в 09:07)   письмо автору
 
   для: serenya1983   (08.11.2013 в 14:52)
 

> Вопрос почему
Модификатор private (закрытый) ограничивает область видимости так, что только класс, где объявлен сам элемент, имеет к нему доступ.
> и как
Модификатор protected (защищенный) разрешает доступ наследуемым и родительским классам

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования