大家好,我是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 调用了parentCClass的方法和属性
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的constructor函数的参数。我希望getFullName1方法返回带有地址的数据。如果我写:
$obj = new childClass("title", "Rohim", "Uddin", 50);
在这里,我只能在childClass的__constructor函数参数中传递参数。
我的问题是在哪里传递parentClass的constructor函数的参数?更具体的$address参数;提前谢谢。我对任何错误感到抱歉。
首先对继承的含义进行一点解释。这里的事实是childClass
是parentClass
的一个实例。那这意味着什么呢?这意味着只要访问修饰符是public
或protected
,childClass
就可以使用parentClass
的所有变量和方法。您选择了创建公共变量,这意味着您可以在childClass
中使用parentClass
中定义的变量。这意味着这将运行良好:
$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