gpt4 book ai didi

php - 在 php 中实例化对象时为 parent::__constructor() 函数传递参数

转载 作者:搜寻专家 更新时间:2023-10-31 21:05:15 25 4
gpt4 key购买 nike

大家好,我是 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 的构造函数的参数。我希望 getFullName1 方法返回带地址的数据。如果我写:

         $obj = new childClass("title", "Rohim", "Uddin", 50);

这里我只能在 childClass 的 __constructor 函数参数中传递参数。

我的问题是在哪里为 parentClass 的构造函数的参数传递参数?更具体的 $address 参数;提前致谢。对于任何错误,我深表歉意。

最佳答案

首先解释一下继承的含义。这里的事实是 childClassparentClass 的一个实例。那是什么意思呢?这意味着 childClass 可以使用 parentClass 的所有变量和方法,只要访问修饰符是 publicprotected .您选择了创建公共(public)变量,这意味着您可以在 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

关于php - 在 php 中实例化对象时为 parent::__constructor() 函数传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33665714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com