ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## 访问控制 对属性或方法的访问控制,也即可见性(visibility),是通过关键字 public,protected,private 实现的。 * public: 被定义为公有的类成员可以在任何地方被访问。 * protected: 被定义为受保护的类成员则可以被其自身以及其子类和父类访问。 * private: 被定义为私有的类成员则只能被其定义所在的类访问。 ### 属性的访问控制 类属性可以定义为 public,protected,private 之一。如果用 var 定义,则被视为公有。 ``` <?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 $obj2->public; // 这行能被正常执行 echo $obj2->protected; // 这行会产生一个致命错误 echo $obj2->private; // 未定义 private $obj2->printHello(); // 输出 Public、Protected2 和 Undefined ?> ``` ### 方法的访问控制 类中的方法可以被定义为 public,protected,private 如果没有设置这些关键字,则默认为 public ``` <?php class MyClass { // 声明一个公有的构造函数 public function __construct(){} // 声明一个公有的方法 public function myPublic(){} // 声明一个受保护的方法 protected function myProtected(){} // 声明一个私有的方法 private function myPrivate(){} // 此方法默认为公有 function foo() { $this->myPublic(); $this->myProtected(); $this->myPrivate(); } } $obj = new MyClass; $obj->myPublic(); // 这行能被正常执行 $obj->myProtected(); // 这行会产生一个致命错误 $obj->myPrivate(); // 这行会产生一个致命错误 $obj->foo(); // 公有,受保护,私有都可以执行 class MyClass2 extends MyClass { // 此方法默认为公有 function foo2() { $this->myPublic(); $this->myProtected(); $this->myPrivate(); // 这行会产生一个致命错误 } } $obj2 = new MyClass2; $obj2->myPublic(); // 这行能被正常执行 $obj2->foo2(); // 公有的和受保护的都可执行,但私有的不行 ?> ```