簡體   English   中英

子 class 訪問父 class 中的私有成員變量

[英]Child class access to private member variables in the parent class

我嘗試創建 class UserTeacherUser class 擴展 我對Teacher有問題 class 可以訪問parent ZA2F21ED4F8EBC2BBB1它的奇怪成員變量。

User Class

<?php

class User
{
    private $username;

    protected $password;

    public function login()
    {
        return 'login';
    }

    public function register()
    {
        return 'register';
    }
}

Teacher Class

<?php
class Teacher extends User
{
    public $id;

    public $name;

    public $description;

    public $email;

    public $phone;


    public function getUsername()
    {
        return $this->username;
    }


    public function getPassword()
    {
        return $this->password;
    }
}

PHP 7.2.14 (cli) (built: Jan 9 2019 22:23:26) ( ZTS MSVC15 (Visual C++ 2017) x64 ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998 -2018 Zend 科技

Windows 10

有什么合乎邏輯的理由嗎?

$this->username不調用父私有成員username ,它動態創建新的子 object 屬性username

要在教師中保持username私有,您需要將字段設置為受保護。 受保護的字段意味着對於超級 class 和兒童來說是私有的。

您不能從外部訪問 class 的私有屬性或方法。

Teacher::$username在這種情況下是一個未定義的屬性(1. 父級的私有屬性對於它的子級是不可見的 2. 它本身沒有定義),所以每當你調用getUsername()時,都會拋出一個通知,具體取決於你的錯誤報告配置你會在屏幕上看到這個。

如果您想從Teacher class 訪問User::$username ,您必須將其設為受保護或公開 - 有什么區別:查看此以獲取更多信息https://www.php.net/manual/en/language.oop5。能見度.php

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM