2014-01-15 6 views
0

У меня есть класс с именем Parent и класс Child, который наследует класс Parent. Parent класс имеет свойство filename со значением testfile .в первого шага я изменить значение этого свойства, например, на anothertestvalue в Parent классе testFileame method.Then Я пытаюсь вызвать метод log из Child класса, и этот метод попытаться получить filename собственности от Parent класс.Свойство дочернего и родительского класса

class Parent { 
    public $filename = 'filename'; 

    public function setFilename() { 
      $this->filename = 'anotherfilename' 
    } 

    public function log($message, $this->filename) { 
      //here filename from Child class has value 'filename' but I expect 'anotherfilename' 
    } 
} 

class Child extends Parent { 
    $this->log("somemessage"); 
} 

Я ожидаю, чтобы получить anothertestvalue значение, но метод использует testfile .Can кто-нибудь объяснить, что происходит?

+3

Покажите нам код, и мы сможем помочь. Подобные описания бесполезны без примера кода. – vascowhite

ответ

3

Я думаю, вы неправильно поняли понятие КЛАССА и ИНСТАНЦИИ. У вас должен быть экземпляр вашего класса Child, который вызывает setFilename.

class MyParent { 
    private $filename = 'filename'; 

    public function setFilename($name) { 
     $this->filename = $name; 
    } 

    public function log($message) { 
     //here filename from Child class has value 'filename' but I expect 'anotherfilename' 
     print $this->filename; 
    } 
} 

class MyChild extends MyParent { 
    //... 
} 

$child = new MyChild(); 
$child->setFilename("anotherfilename"); 
$child->log("somemessage"); // print "anotherfilename" 

Дальнейшие подробности здесь: http://www.php.net/manual/en/language.oop5.php

0

Ну, вы не устанавливаете значение. Вы только что определили метод, который установит значение , если вызвано.

Итак, позвоните по методу setFilename(), после чего значение изменится.

+0

Но я думал, что изменение значения свойства в родительском классе будет достаточным для использования в дочернем классе. И метод 'setFilename' вызывается перед вызовом метода log из child. – fortegente

Смежные вопросы