Why I can`t access a protected property from its own class directly?
我对PHP不熟悉。我现在学习可见性范围概念(也称为访问修饰符)。
我在这个论坛上也看到了以下两个链接:
未能获取包含":protected"的对象属性
公共、私人和受保护之间有什么区别?
我在名为"class.address.inc"的文件中创建了一个简单类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <?php /** * Physical address. */ class Address { // Street address. public $street_address_1; public $street_address_2; // Name of the City. public $city_name; // Name of the subdivison. public $subdivision_name; // Postal code. public $postal_code; // Name of the Country. public $country_name; // Primary key of an Address. protected $_address_id; // When the record was created and last updated. protected $_time_created; protected $_time_updated; /** * Display an address in HTML. * @return string */ function display() { $output = ''; // Street address. $output .= $this->street_address_1; if ($this->street_address_2) { $output .= '<br/>' . $this->street_address_2; } // City, Subdivision Postal. $output .= '<br/>'; $output .= $this->city_name . ', ' . $this->subdivision_name; $output .= ' ' . $this->postal_code; // Country. $output .= '<br/>'; $output .= $this->country_name; return $output; } } |
然后,我在demo.php文件中创建了一个简单的程序,如下所示:
1 2 3 4 5 6 7 | require 'class.Address.inc'; echo 'Instantiating Address'; $address = new Address; echo 'Empty Address'; echo '<tt>[cc lang="php"]' . var_export($address, TRUE) . ' |
的='tt>';echo"设置属性…"$address->street_address_1='555假街道';$address->city_name='townsville';$address->subdivision_name='state';$address->邮政编码='12345';$address->country_name='美利坚合众国';echo'
1 | ' . var_export($address, TRUE) . ' |
';echo"显示地址…"echo$address->display();echo"测试受保护的访问";echo"地址ID:$address->_address_id"< /代码>
除了最后一行以外,上面的程序中的所有内容都可以工作。我收到一个致命错误,说我不能访问"地址"属性。为什么?
当您希望使变量/函数在扩展当前类(包括父类)的所有类中都可见时,保护范围即为。
"$address"对象来自当前名为address的类。我做错了什么?
请协助。
QWERTY
试图访问受保护属性的代码必须位于类的方法或扩展该方法的类中。您询问的