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