我正在尝试在父类中使用子类属性但我无法得到结果。我在子类中使用构造函数。也许有人可以解释一下,我该怎么做?我将在下面留下一些注释代码。谢谢!
Class DataBase extends Main {
public $email, $password1, $password2;
function __construct($email,$password1,$password2) { //this is my child class with properties
$this->email = mysql_real_escape_string($email);
$this->password1 = mysql_real_escape_string($password1);
$this->password2 = mysql_real_escape_string($password2);
}
}
Class Main{} //this is my parent class. I want to use DataBase class properties here.
已编辑最后一个问题是错的。
答案 0 :(得分:0)
您应该能够轻松访问这些变量,因为它们具有访问修饰符“public”,这意味着它们可以全局访问。 e.g。
<?php
$dbc = new Main( 'val1', 'val2', 'val3' );
echo $dbc->email, ' ', $dbc->password1, ' ', $dbc->password2, PHP_EOL;
此代码段可以正常使用
编辑:我还想补充说,使用mysql_real_escape_string函数需要一个活动的MySQL连接或可用的MySQL资源。
答案 1 :(得分:0)
如果将属性设置为public,则应该能够访问父类中的子属性,因为始终使用PHP中的实际对象。但是,在OOP中这是一件非常糟糕的事情。如果您有另一个子类,则可能没有这些属性。这是一个纯粹的OOP反模式。
修改强>
执行$obj_suc = new Main($input_email, $input_password1, $input_password2);
时,您实例化了课程Main
。生成的对象$obj_suc
对类DataBase
一无所知。绝对没有。如果要实例化类DataBase
,则必须执行$obj_suc = new DataBase($input_email, $input_password1, $input_password2);
。
如果您希望我们帮助您进行重构,我们需要更多来自Main
和DataBase
的代码(例如,使用子属性的1方法)。我们还需要您执行$obj_suc = new Main($input_email, $input_password1, $input_password2);
的代码。
答案 2 :(得分:0)
你应该将你的代码重构为更像这样的东西:
<?php
class Foo {
public $var1, $var2;
public function __construct($v1, $v2) {
$this->var1 = $v1;
$this->var2 = $v2;
}
}
class Main {
private $foo = null;
public function __construct(Foo f$) {
$this->foo = $f;
}
public function getChildMembers() {
if ($this->foo == null) return;
return array($this->foo->var1, $this->foo->var2);
}
}
$foo = new Foo('Bar', 'FooBar');
$main = new Main($foo);
var_dump($main->getChildMembers());