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

Форум PHP

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

 

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

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

тема: наследование в php
 
 автор: asker   (08.05.2009 в 14:10)   письмо автору
 
 

вот код

class Test{
    private $var;
    function setMe($value){
        $this->var = $value;
    }
}

class More extends Test{
    public $var;
}

$oMore = new More;
echo $oMore->setMe('foo');
echo $oMore->var;
print_r($oMore);


те есть класс More который наследует Test. Я думал что тк у нас в классе Test есть переменная var но она же есть и в More значит мы ее переопределили в производном классе.

И когда делаем echo $oMore->setMe('foo'); то мы присваевыем foo свойству public $var в More

но echo $oMore->var; ..ничего не выводит

а print_r($oMore); //More Object ( [var] => [var:private] => foo )

те получается мы foo присвоили свойству private $var ПОЧЕМУ ? ПОЧЕМУ У в $oMore теперь два свойства var ? ПОЧЕМУ НЕ СРАБОТАЛО ПЕРЕОПРЕДЕЛЕНИЕ VAR ?

  Ответить  
 
 автор: name   (08.05.2009 в 16:48)   письмо автору
 
   для: asker   (08.05.2009 в 14:10)
 

Это называется инкапсуляцией.
$var в классе Test объявлена как закрытая (частная) переменная. Поэтому при наследовании ты не можешь к ней достучаться. Объяви ее как protected и все получится.

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

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