php类的访问符,PHP_php面向对象全攻略 (九)访问类型,13.访问类型 类型的访问修饰符 - phpStudy...

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

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

同一个类中 √ √ √

类的子类中 √ √

所有的外部成员 √

代码片段

复制代码 代码如下:

/**

* Define MyClass

*/

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; //Works

echo $obj->protected; // Fatal Error

echo $obj->private; // Fatal Error

$obj->printHello(); // Shows Public, Protected and Private

/**

* Define MyClass2

*/

class MyClass2 extends MyClass{

//We can redeclare the public and protected method, but not private

protected $protected = 'Protected2';

function printHello(){

echo $this->public;

echo $this->protected;

echo $this->private;

}

}

$obj2 = new MyClass2();

echo $obj->public; //Works

echo $obj2->private; // Undefined

echo $obj2->protected; // Fatal Error

$obj2->printHello(); // Shows Public, Protected2, not Private

?>

代码片段

复制代码 代码如下:

/**

* Define MyClass

*/

class MyClass{

// Contructors must be public

public function __construct() { }

// Declare a public method

public function MyPublic() { }

// Declare a protected method

protected function MyProtected() { }

// Declare a private method

private function MyPrivate() { }

// This is public

function Foo() {

$this->MyPublic();

$this->MyProtected();

$this->MyPrivate();

}

}

$myclass = new MyClass;

$myclass->MyPublic(); //Works

$myclass->MyProtected(); // Fatal Error

$myclass->MyPrivate(); // Fatal Error

$myclass->Foo(); // Public, Protected and Private work

/**

* Define MyClass2

*/

class MyClass2 extends MyClass{

// This is public

function Foo2(){

$this->MyPublic();

$this->MyProtected();

$this->MyPrivate(); // Fatal Error

}

}

$myclass2 = new MyClass2;

$myclass2->MyPublic(); // Works

$myclass2->Foo2(); // Public and Protected work, not Private

?>

另外在子类覆盖父类的方法时也要注意一点,子类中方法的访问权限一定不能低于父类

被覆盖方法的访问权限,也就是一定要高于或等于父类方法的访问权限。

例如,如果父类方法的访问权限是protected 那么子类中要覆盖的权限就要是protected

和public,如果父类的方法是public 那么子类中要覆盖的方法只能也是public,总之子类中的

方法总是要高于或等于父类被覆盖方法的访问权限。相关阅读:

asp之基于adodb.stream的文件操作类

CSS经典技巧十则

asp.net 编程 实用语句(6条)

让javascript画布变成Silverlight

用网页技术CSS实现网页背景渐变的四种代码设置

Win 7重装后五项不得不做的初始设置的解决办法

IE8 chrome中table隔行换色解决办法

jsp无刷新文件上传的实现

ASP教程:ASP是不区分大小写

VB2005中开发新一代控制台应用程序(1)

Windows7按空格键快速调用启动管理器

用PHP制作静态网站的模板框架

很好用的PHP数据库类

apache 403错误 Forbidden解决方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值