對屬性或方法的存取控制,是透過在前面新增關鍵字 public、protected 或 private 來實現的。
由public 所定義的類別成員可以在任何地方被存取;
由protected 所定義的類別成員則可以被其所在類別的子類別和父類別存取(當然,該成員所在的類別也可以存取);而由private 定義的類別成員則只能被其所在類別存取。
在PHP5中支援以下3種存取修飾符。
(1)public。此修飾符是預設的,如果未對屬性或方法指定存取修飾符,它將
是public。共有的屬性或方法可以在類別的內部和外部進行存取。
(2)private。此修飾符表示被標記的屬性或方法只能夠在類別的內部進行存取。不可以被繼承!
(3)protected。此修飾符表示被標記的屬性或方法只能在類別的內部存取。可以被繼
private同一個類別可以訪問,子類別和外部類別都不能存取;
protected同一個類別和子類別可以訪問,外部類別不能存取。
對類別成員的存取控制
類別成員都必須使用關鍵字public、protected 或private 進行定義
<?php class MyClass { public $public = 'Public'; protected $protected = 'Protected'; private $private = 'Private'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj = new MyClass(); echo $obj->public; // 这行能被正常执行 echo $obj->protected; // 这行会产生一个致命错误 echo $obj->private; // 这行也会产生一个致命错误 $obj->printHello(); // 输出 Public、Protected 和 Private class MyClass2 extends MyClass { // 可以对 public 和 protected 进行重定义,但 private 而不能 protected $protected = 'Protected2'; function printHello() { echo $this->public; echo $this->protected; echo $this->private; } } $obj2 = new MyClass2(); echo $obj->public; // 这行能被正常执行 echo $obj2->private; // 未定义 private echo $obj2->protected; // 这行会产生一个致命错误 $obj2->printHello(); // 输出 Public、Protected2,但不会输出 Private class Bar { public function test() { $this->testPrivate(); $this->testPublic(); } public function testPublic() { echo "Bar::testPublic\n"; } private function testPrivate() { echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic ?>
對方法的存取控制
類別中的方法都必須使用關鍵字public、protected 或private 來定義。如果沒有設定這些關鍵字,則該方法會被設定成預設的 public。
<?php class MyClass { // 构造函数必须是 public public function construct() { } // 声明一个 public 的方法 public function MyPublic() { } // 声明一个 protected 的方法 protected function MyProtected() { } // 声明一个 private 的方法 private function MyPrivate() { } // 这个方法也是 public 的 function Foo() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); } } $myclass = new MyClass; $myclass->MyPublic(); // 这行能被正常执行 $myclass->MyProtected(); // 这行会产生一个致命错误 $myclass->MyPrivate(); // 这行会产生一个致命错误 $myclass->Foo(); // Public、Protected 和 Private 都被调用了 class MyClass2 extends MyClass { // This is public function Foo2() { $this->MyPublic(); $this->MyProtected(); $this->MyPrivate(); // 这行会产生一个致命错误 } } $myclass2 = new MyClass2; $myclass2->MyPublic(); // 这行能被正常执行 $myclass2->Foo2(); // Public 和 Protected 都被调用了,但 Private 不会被调用 ?>
以上是php :類別中成員的存取控制的詳細內容。更多資訊請關注PHP中文網其他相關文章!