Php 子类和父类属性

Php 子类和父类属性,php,oop,Php,Oop,我有一个名为Parent的类和一个继承Parent类的类Child。Parent类有一个值为testfile的属性filename。在第一步中,我更改此属性的值,例如在Parent类中的另一个testvaluetestFileame方法。然后我尝试从Child类调用方法log,该方法尝试从Parent类获取filename属性 class Parent { public $filename = 'filename'; public function setFilename

我有一个名为
Parent
的类和一个继承
Parent
类的类
Child
Parent
类有一个值为
testfile
的属性
filename
。在第一步中,我更改此属性的值,例如在
Parent
类中的
另一个testvalue
testFileame
方法。然后我尝试从
Child
类调用方法
log
,该方法尝试从
Parent
类获取
filename
属性

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");
}

我希望得到另一个测试值,但方法使用的是
testfile
。有人能解释一下发生了什么吗?

好吧,你没有设置值。您刚刚定义了一个方法,该方法将在调用时设置值


因此,简而言之,调用方法
setFilename()
,然后值就会改变。

好吧,您没有设置值。您刚刚定义了一个方法,该方法将在调用时设置值


因此,简而言之,调用方法
setFilename()
,然后值就会改变。

好吧,您没有设置值。您刚刚定义了一个方法,该方法将在调用时设置值


因此,简而言之,调用方法
setFilename()
,然后值就会改变。

好吧,您没有设置值。您刚刚定义了一个方法,该方法将在调用时设置值


因此,简而言之,调用方法
setFilename()
,然后值就会改变。

我认为您误解了类和实例的概念。 您应该有一个调用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"

这里的更多细节:

我认为您误解了类和实例的概念。 您应该有一个调用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"

这里的更多细节:

我认为您误解了类和实例的概念。 您应该有一个调用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"

这里的更多细节:

我认为您误解了类和实例的概念。 您应该有一个调用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"

此处有更多详细信息:

向我们展示一些代码,我们将提供帮助。如果没有代码示例,这样的描述是无用的。向我们展示一些代码,我们将能够提供帮助。如果没有代码示例,这样的描述是无用的。向我们展示一些代码,我们将能够提供帮助。如果没有代码示例,这样的描述是无用的。向我们展示一些代码,我们将能够提供帮助。如果没有代码示例,这样的描述是无用的。但我认为在父类中更改属性值就足以在子类中使用。在从子类调用
log
方法之前调用了
setFilename
方法。但我认为更改父类中的属性值就足够在子类中使用了。在从子类调用
log
方法之前调用了
setFilename
方法。但我认为更改父类中的属性值就足够在子类中使用了。在从子类调用
log
方法之前调用了
setFilename
方法。但我认为更改父类中的属性值就足够在子类中使用了。以及在从子级调用
log
方法之前调用的
setFilename
方法。