将变量保存在父类中PHP
问题描述:
我在PHP中遇到类错误。我有这样的代码(扔什么是必要的,有助于我 - 我只给了代码的相关行):将变量保存在父类中PHP
abstract class Controller {
protected $czyZalogowany;
public function __construct($czyZalogowany) {
$this->czyZalogowany = $czyZalogowany;
echo 'Controller (__construct): ' . $czyZalogowany . '<br><br>';
}
public function pobierzStatusUzytkownika() {
echo 'Controller: ' . $this->czyZalogowany . '<br><br>';
return $this->czyZalogowany;
}
}
class HomeController extends Controller {
public function __construct() {
echo 'HomeController: ' . $this->pobierzStatusUzytkownika() . '<br><br>';
}
}
我得到这样的事情:
Controller (__construct): 1
Controller:
HomeController:
我的意思是,救母分类价值。在派生类中,我使用了一个类似的方法来分配值,它工作。
我将快速帮助表示感谢;)
答
我必须说,它实际上是很难告诉你在你的问题问。以下是您的术语中的一些PHP类系统示例。
此处我们声明所有子类将拥有名为userStatus
的属性 ,只有他们和他们的子女 (没有外部访问)可以访问。所有的孩子班级将能够输出他们的状态。
abstract class BaseController
{
protected $userStatus;
public function __construct($status)
{
$this->userStatus = $status;
}
public function showStatus()
{
echo $this->userStatus;
}
}
这个声明意味着所有控制器都在创建接受一些$status
,这给状态将被输出时showStatus()
将运行。
在这里我们宣布BaseController
的第一个孩子,UserController
。它覆盖父构造函数,始终将$this->userStatus
设置为2
。
class UserController extends BaseController
{
public function __construct()
{
$this->userStatus = 2;
}
}
该类完全忽略实例化时传递给它的内容。 假设我们把两种定义在“inheritance.php”,让我们来测试它在控制台:
php -r 'require("inheritance.php");
$controller = new UserController("5");
$controller->showStatus();'
输出是2
;
让我们添加第二个孩子:
class HomeController extends BaseController
{
}
它不会覆盖任何东西。它不是抽象的,所以我们能够实例化它。
测试:
php -r 'require("inheritance.php");
$controller = new HomeController("5");
$controller->showStatus();'
输出是5
。
我已将代码添加到您的问题中。除非是数百行代码,否则最好直接将其添加到问题中,以阻止用户点击链接等。:)欢迎来到SO! – Fluffeh
简短的回答:你没有调用父类的构造函数,也不接受你孩子的构造函数中的任何参数。长的回答:那根本不是继承的工作方式。通过扩展一个类,你继承了它的***结构,而不是它的数据***。 – deceze