2016-07-11 56 views
1

我一直在線上學習PHP的課程。我已經宣佈受保護的班級成員。這些成員不應該在課堂外訪問,但我可以訪問它們。保護和私人知名度在PHP

這是類(class.Address.inc.php)

Class Address 
{ 
    //Street Address 
    protected $street_Address_1; 
    public $street_Address_2; 

    //Name of the city 
    public $city_name; 

    //Subdivision name 
    public $subdivision_name; 

    //Postal code 
    public $postal_code; 

    //country name 
    public $country_name; 

這是在其中我使用的地址類Demo.php文件。

<?php 

require 'class.Address.inc'; 

    $address=new Address; 
    $address->street_Address_1= "555 Fake Street";//protected but accessible 
    $address->street_Address_2="Hello"; 
    $address->city_name="Townsville"; 

我能夠訪問受保護的成員並從Demo.php中初始化它。受保護的成員是不是應該在宣稱的課程之外提供?

+3

不適用於我:https://ideone.com/03ZhNl – tkausl

+0

它應該拋出未被捕獲的錯誤。你的PHP版本是什麼? –

+0

我既不是http://sandbox.onlinephpfunctions.com/code/855f49cd25521625b711f9536541698b1865626e –

回答

0

不知道,但會再次嘗試採取一個小測試....

<?php 

require 'class.Address.inc'; //require 'class.Address.inc.php'; 
$address=new Address; 
$address->street_Address_1= "555 Fake Street";//protected but accessible 
$address->street_Address_2="Hello"; 
$address->city_name="Townsville"; 
+0

當然,如果這是實際的錯誤會產生一些其他錯誤像'致命錯誤:類「地址」不found' – RiggsFolly

+0

我不明白這個答案。你爲什麼要'需要'class.Address.inc';'粗體?問題已經在使用那部分。我看到你把'require'class.Address.inc.php';'作爲註釋。你只是建議在最後加上'.php'?你有它逆轉。 – Ultimater

+0

對不起,這是我的錯。我不知道.inc文件是要包含的文件的擴展名。如果你檢查你會明白我已經命名文件class.Address.inc.php。我沒有意識到的是,我還創建了一個class.Address.inc文件,其中每個成員都是公開的。我已將Class.Address.inc.php文件的成員更改爲受保護的成員。代碼訪問class.Address.inc文件而不是class.Address.inc.php。 .http://stackoverflow.com/questions/7129842/what-is-inc-and-why-to-use-it – manufg

0

如何訪問課外保護瓦爾,在這裏你可以得到它的價值相同,你可以設定值做。

<?php 
class myclass{ 
    protected $myname; 
    public function __construct(){ 
     $this->myname = "myclass class"; 
    } 
} 

class childclass extends myclass{ 

    public function __construct(){ 
     parent::__construct(); 
    } 

    public function getMyName(){ 
     return $this->myname; 
    } 
} 

$obj = new childclass(); 
echo $obj->getMyName();