2017-01-30 23 views
0

我有一個愚蠢的懷疑。
我的用戶類
設置的用戶名財產作爲私人使用,但根據規定私有財產不應該容易
在兒童類或繼承和類之外,但它在我的代碼發生 。我只想知道我做錯了什麼。PHP私有財產不應該訪問子類

<?php 
    class User{ 
     private $username; 
    } 
    class UserRepository extends User{ 
     public function get(){ 
      return $this->username; 
      //this should give error can't access private property 
     } 
     public function set($username){ 
     $this->username=$username; 
     //this should give error can't access private property 
     } 
    } 

    $UserReposetry =new UserRepository; 
    $UserReposetry->username='daulat';//this should give error. 
    echo $UserReposetry->username;//this should give error. 

它不應該工作,但它的工作。

+2

是的,那就是PHP。事實上,你不是訪問'User'類的私有'$ username',而是通過賦值'daulat'創建一個新的'public'(因爲沒有指定)'$ username'屬性。 – xzoert

回答

1

沒辦法, 這裏看到代碼和看到結果(誤差)

<?php 
class User{ 
    private $username="aaa"; 
} 
class UserRepository extends User{ 
    public function get(){ 
     return $this->username; 
    } 

} 
$UserReposetry =new UserRepository; 
echo $UserReposetry->get();//this should give error. 

輸出:
說明:未定義屬性:UserRepository::$username在C:\用戶...... ..... index.php on line 7
(要查看此通知,您必須將錯誤報告設置爲E_ALL)
並且第7行表示return $this->username;,請嘗試使用:: parent key字太

在你的代碼:你只是設置一個新的變量。所以不要誤解代碼使用私有成員。

+0

我仍然沒有收到任何錯誤。黑色頁面 – daulat

+0

在你的php.ini文件中啓用錯誤報告或使用php代碼來啓用錯誤報告。你會得到我得到的同樣的錯誤消息。使用此代碼不是你的,因爲你只是創建一個變量。瞭解運行此代碼。在你的php文件 – webDev

+1

上啓用錯誤報告..對於User類,它給出錯誤 致命錯誤:未捕獲錯誤:無法訪問私有屬性User :: $ username in/var/www/test.com/public_html/demo/index.php:15 Stack trace:#0 {main}拋出/var/www/test.com/public_html/demo/index.php 15行 – daulat