Php 在子方法中访问父变量

Php 在子方法中访问父变量,php,class,scope,private-members,Php,Class,Scope,Private Members,我现在有两个班,一个叫狗,一个叫狮子狗。现在我如何使用Poodle类中Dog中定义的变量。我的代码如下: class dog { protected static $name = ''; function __construct($name) { $this->name = $name } } class Poodle extends dog { function __construct($na

我现在有两个班,一个叫狗,一个叫狮子狗。现在我如何使用Poodle类中Dog中定义的变量。我的代码如下:

  class dog {
       protected static $name = '';

       function __construct($name) {
            $this->name = $name
       }
  }

  class Poodle extends dog {
       function __construct($name) {
           parent::__construct($name)
       } 

       function getName(){
           return parent::$name;
       }
  }

$poodle = new Poodle("Benjy");
print $poodle->getName();
我得到这个错误

注意:未定义变量:name


问题出在您的
构造函数中。你写道:

$this->name = $name;
但是使用
$this
意味着
name
是一个实例变量,而实际上它是一个静态变量。将其更改为:

self::$name = $name;

这应该很好。

在您的dog类中,您已经将变量$name声明为static,您必须在声明变量时不使用static单词

class dog {
   protected $name = '';

   function __construct($name) {
        $this->name = $name
   }
}



class Poodle extends dog {
   function __construct($name) {
       parent::__construct($name)
   } 

   function getName(){
       return $this->name;
   }
}

$poodle = new Poodle("Benjy");
print $poodle->getName();

我猜“name”是混凝土狗的一个属性,所以它首先不应该是静态的。要从继承类中访问非静态父类属性,只需使用“$this”


你们不需要继承吗?哦,对不起,伙计们,我在这里发布代码时遗漏了一点。它仍然不能与extends一起工作,但是让dog的所有(固有的)实例具有相同的名称没有多大意义,所以静态在这里没有多大意义。
    class dog {
       protected $name = '';

       function __construct($name) {
            $this->name = $name;
       }
    }

    class Poodle extends dog {
       function getName(){
           return $this->name;
       }
    }