• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php面向对象全攻略 (九)访问类型_php基础

php 搞代码 4年前 (2022-01-26) 22次浏览 已收录 0个评论

13.访问类型
类型的访问修饰符允许开发人员对类成员的访问进行限制,这是PHP5 的新特性,但却
是OOP 语言的一个好的特性。而且大多数OOP 语言都已支持此特性。PHP5 支持如下3 种访
问修饰符
public (公有的、默认的),private (私有的)和protected (受保护的)三种。
public 公有修饰符,类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)
这个类成员(包括成员属性和成员方法),在PHP5 之前的所有版本中,PHP 中类的成员都是
public 的,而且在PHP5 中如果类的成员没有指定成员访问修饰符,将被视为public。
例:public $name;
public function say(){};
private 私有修改符,被定义为private 的成员,对于同一个类里的所有成员是可见的,即
是没有访问限制;但对于该类的外部代码是不允许改变甚至读操作,对于该类的子类,也不
能访问private 修饰的成员。
例:private $var1 = ‘A’; //属性
private function getValue(){} //函数
protected 保护成员修饰符,被修饰为protected 的成员不能被该类的外部代码访问。但是
对于该类的子类有访问权限,可以进行属性、方法的读及写操作,该子类的外部代码包括其的
子类都不具有访问其属性和方法的权限。
例:protected $name;
protected function say(){};
private protected public
同一个类中 √ √ √
类的子类中 √ √
所有的外部成员 √
代码片段

 <BR><?php <BR>/** <BR>* Define MyClass <BR>*/ <BR>class MyClass{ <BR>public $public = 'Public'; <BR>protected $protected = 'Protected'; <BR>private $private = 'Private'; <BR>function printHello(){ <BR>echo $this->public; <BR>echo $this->protected; <BR>echo $this->private; <BR>} <BR>} <BR>$obj = new MyClass(); <BR>echo $obj->public; //Works <BR>echo $obj->protected; // Fatal Error <BR>echo $obj->private; // Fatal Error <BR>$obj->printHello(); // Shows Public, Protected and Private <BR>/** <BR>* Define MyClass2 <BR>*/ <BR>class MyClass2 extends MyClass{ <BR>//We can redeclare the public and protected method, but not private <BR>protected $protected = 'Protected2'; <BR>function printHello(){ <BR>echo $this->public; <BR>echo $this->protected; <BR>echo $this->private; <BR>} <BR>} <BR>$obj2 = new MyClass2(); <BR>echo $obj->public; //Works <BR>echo $obj2->private; // Undefined <BR>echo $obj2->protected; // Fatal Error <BR>$obj2->printHello(); // Shows Public, Protected2, not Private <BR>?> <BR>


代码片段

 <BR><?php <BR>/** <BR>* Define MyClass <BR>*/ <BR>class MyClass{ <BR>// Contructors must be public <BR>public function __construct() { } <BR>// Declare a public method <BR>public function MyPublic() { } <BR>// Declare a protected method <BR>protected function MyProtected() { } <BR>// Declare a private method <BR>private function MyPrivate() { } <BR>// This is public <BR>function Foo() { <BR>$this->MyPublic(); <BR>$this->MyProtected(); <BR>$this->MyPrivate(); <BR>} <BR>} <BR>$myclass = new MyClass; <BR>$myclass->MyPublic(); //Works <BR>$myclass->MyProtected(); // Fatal Error <BR>$myclass->MyPrivate(); // Fatal Error <BR>$myclass->Foo(); // Public, Protected and Private work <BR>/** <BR>* Define MyClass2 <BR>*/ <BR>class MyClass2 extends MyClass{ <BR>// This is publ<em>/本2文来源[email protected]搞@^&代*@码2网</em><strong>搞gaodaima代码</strong>ic <BR>function Foo2(){ <BR>$this->MyPublic(); <BR>$this->MyProtected(); <BR>$this->MyPrivate(); // Fatal Error <BR>} <BR>} <BR>$myclass2 = new MyClass2; <BR>$myclass2->MyPublic(); // Works <BR>$myclass2->Foo2(); // Public and Protected work, not Private <BR>?> <BR>


另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类
被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。
例如,如果父类方法的访问权限是protected 那么子类中要覆盖的权限就要是protected
和public,如果父类的方法是public 那么子类中要覆盖的方法只能也是public,总之子类中的
方法总是要高于或等于父类被覆盖方法的访问权限。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php面向对象全攻略 (九)访问类型_php基础
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址