大家好,我对php中的面向对象编程非常陌生。所以有时我在学习PHP的OOP时需要帮助。 这是一个名为parentClass的类,我有一些方法和属性,如:
class parentClass
{
public $fname;
public $lname;
public $age;
function __construct($title, $firstName, $lastName, $age,$address)
{
$this->title = $title;
$this->fname = $firstName;
$this->lname = $lastName;
$this->age = $age;
$this->address = $address;
}
public function getFullName()
{
return $this->fname . " " . $this->lname. " ". $this->address;
}
}
我还有一个名为childClass的子类,它使用其他几个属性和方法扩展parentClass,并且还有另一个_constructor函数。然后我用parent :: __ construct
调用parentClass的方法和属性 class childClass extends parentClass
{
function __construct($title1, $firstName1, $mainName1, $age1)
{
parent::__construct($title, $firstName, $lastName, $age, $address)
$this->title1 = $title1;
$this->fname1 = $firstName1;
$this->lname1 = $mainName1;
$this->age1 = $age1;
}
function getFullName1()
{
return $this->fname1 . " " . $this->lname1 . " ". $this->address;
}
}
所以现在我必须将参数传递给parentClass的construcotr函数的参数。我希望getFullName1方法返回带地址的数据。 如果我写:
$obj = new childClass("title", "Rohim", "Uddin", 50);
这里我只能在childClass的__constructor函数参数中传递参数。
我的问题是在哪里传递parentClass的construcotr函数参数的参数?更具体的$ address参数; 提前致谢。对于任何错误,我很抱歉。
答案 0 :(得分:2)
首先对遗产的含义进行一点解释。这里的事实是childClass
是parentClass
的一个实例。
那是什么意思呢?这意味着只要访问修饰符为childClass
或parentClass
,public
就可以使用protected
的所有变量和方法。
您选择了创建公共变量,这意味着您可以使用parentClass
中childClass
中定义的变量。
这意味着这将完美无缺:
$instance = new childClass("Title","Firstname","Lastname",etc.);
echo $instance->fname; //echo's "Firstname" (according to the code below)
如果使用继承,则子构造函数需要接收要通过父构造函数传递的参数。
你几乎在那里,我在下面的代码中提出了一些意见:
class parentClass
{
//Create the title variable if you want to use it here
public $title;
public $fname;
public $lname;
public $age;
//Create the address variable if you want to use it here
public $address;
function __construct($title, $firstName, $lastName, $age,$address)
{
$this->title = $title;
$this->fname = $firstName;
$this->lname = $lastName;
$this->age = $age;
$this->address = $address;
}
public function getFullName()
{
return $this->fname . " " . $this->lname. " ". $this->address;
}
}
class childClass extends parentClass
{
//It's not necessary to add an `1` or something else to this parameters. Just give them clean names.
//If you want to pass the `$address` variable through the constructor you should add this parameter to this constructor. Since it's the constructor the variable won't be filled elsewhere.
function __construct($title, $firstName, $lastName, $age, $address)
{
parent::__construct($title, $firstName, $lastName, $age, $address)
//This code is too much. In the line above you already passed the variables to the parent constructor. There they are handled by the parents constructor.
//As i explained above you can access these variables, thus it makes no sence to create new variables here or to override the just-setted variables.
/*$this->title1 = $title1;
$this->fname1 = $firstName1;
$this->lname1 = $mainName1;
$this->age1 = $age1;*/
}
//Why you write this function here? Because `childClass` inherits from `parentClass` you can just use the methods of `parentClass`. If you call `childClass->getFullName()` the `getFullName` function in `parentClass` will be executed.
//It will return the same values as you are returning here. Just leave this function. Only create this function if you want to override the default `parentClass->getFullName` behaviour. Then leave the 1 so it will be `getFullName` instead of `getFullName1`
/*function getFullName1()
{
return $this->fname1 . " " . $this->lname1 . " ". $this->address;
}*/
}
那么到底发生了什么?
$instance = new childClass("My Title", "Stefan", "Pols", 25, "My Adress 1");
//`childClass` constructor is called here.
//The first line (`parent::__construct`) will pass the variables to the parentClass. There they are set to the right variables.
echo $instance->getFullName();
//Compiler tries to find the method `getFullName()` in `childClass`. It doesn't exist.
//Compiler sees it inherits from `parentClass` so it's going to search the method `getFullName()` in `parentClass`
//It does exist. Since we setted the variables during the creation of the `$instance` object (through the constructor) this function will return the right values.
Output: `$this->fname . " " . $this->lname. " ". $this->address;` > Stefan Pols My Adress 1