PHP中的类继承问题

PHP中的类继承问题,php,class,inheritance,properties,extends,Php,Class,Inheritance,Properties,Extends,大家好:) 我有一个问题,我在别处没有找到答案。我试图解释我的问题: 我有一个类,如果我从它创建另一个类,那么从这个子类我就无法访问父类的属性。 我做错了什么? 我尝试将我的类变量复制到一个局部变量,并尝试返回该局部变量,但以下三种方法都不起作用 以下是我的例子。 首先,我创建了一个简单的对象: $test = new test(); 我的两个班是: class test { public $testvar; public function __construct() {

大家好:)

我有一个问题,我在别处没有找到答案。我试图解释我的问题: 我有一个类,如果我从它创建另一个类,那么从这个子类我就无法访问父类的属性。 我做错了什么? 我尝试将我的类变量复制到一个局部变量,并尝试返回该局部变量,但以下三种方法都不起作用

以下是我的例子。 首先,我创建了一个简单的对象:

$test = new test();
我的两个班是:

class test {

    public $testvar;

    public function __construct() {
        $this->testvar = 1234568;
        echo ":) ".$this->testvar();
        $test2 = new test2();
}

    public function testvar() {
        echo "testvar() called > ";
        return $this->testvar;
    }
}
和测试2:

class test2 extends test  {

    public function __construct() {
        echo "<br>:| this-> ".$this->testvar;
        echo "<br>:| parent:: ". parent::testvar();
        echo "<br>:| "; $this->testvar();
    }

}
类test2扩展了测试{
公共函数构造(){
echo“
:| this->”$this->testvar; echo“
:|parent::”.parent::testvar(); echo“
:|“;$this->testvar(); } }
谁能有个主意?
Thx

您误解了继承的概念。在
test
的构造函数中实例化
test2
不是继承

未调用
test
的构造函数,因此未设置
testvar
。删除
$test2=newtest2()来自
测试的构造函数。尝试:

class test {

    public $testvar;

    public function __construct() {
        $this->testvar = 1234568;
        echo ":) ".$this->testvar();
}

    public function testvar() {
        echo "testvar() called > ";
        return $this->testvar;
    }
}

class test2 extends test  {

    public function __construct() {
        parent::__construct();
        echo "<br>:| this-> ".$this->testvar;
        echo "<br>:| "; $this->testvar();
    }

}

$test2 = new test2();
类测试{
公共$testvar;
公共函数构造(){
$this->testvar=1234568;
echo“:”.$this->testvar();
}
公共函数testvar(){
echo“testvar()调用>”;
返回$this->testvar;
}
}
类test2扩展了测试{
公共函数构造(){
父项::_构造();
echo“
:| this->”$this->testvar; echo“
:|“;$this->testvar(); } } $test2=新的test2();

另请参见(和)。

我想,如果您在test的构造函数中实例化test2,这并不意味着test2是在您创建的上下文中实例化的,这意味着:您设置的变量对test2不可用:)。。。我绝对不应该成为一名技术专家

test2应该类似于:

class test2 extends test  {

public function __construct() {
    parent::__construct();
    echo "<br>:| this-> ".$this->testvar;
    echo "<br>:| parent:: ". parent::testvar();
    echo "<br>:| "; $this->testvar();
  }
}

然后在这些类之外调用新的test2()

我真的误解了。测试类工作得更好,但是我必须在哪里实例化test2?如果我不这样做,test2对象isn将不会。但是如果我在构造函数中创建它,它将成为一个ifinity循环。@szatti1489所以您有类Test和Test2。创建一个新的php文件,例如testing.php,包括Test.php和Test2.php(或其他名称),然后简单地实例化Test2:$Test2=new$Test2();-现在打开testing.php时,它应该输出“1234568”;)是的,但我的项目是:test2,以友好的方式安装。测试是从数据库中查询数据,并从自身实例化表数据所需的子类。我必须从这个新类访问父属性。如果我没有弄错的话:您在父类(Test)中提取DB数据,但是需要Test2来处理这些数据吗?永远不要直接实例化父类!父类通过调用parent::\u construct()在子类中隐式实例化;(不仅仅是通过调用它,而是你明白了…)-然后,你在父类的构造函数中设置的所有属性也可以从子类访问。是的,就像你说的那样。我从Test中查询DB数据,它从DB中读取名称Test2并实例化一个对象$Test2。从$test2开始,我喜欢使用Test的属性。我认为,我必须创建第三个类,它实例化Test,然后读取DB并在需要时实例化Test2。
public function __construct() {
    $this->testvar = 1234568;
    echo ":) ".$this->testvar();
}