PHP知识、源码、教程、框架、程序分享! -- PHP社区 关于我们 联系我们 联系电话 联系QQ

PHP中的public、protected和private属性

发表时间:2014-08-12 点击:

[本文摘要]:PHP 中的public、protected和private属性 OOP中的一个关键范例就是封装和 对象 属性(也可以叫做成员变量)的访问保护。大部分通用的OO语言都有三种主要的访问限制关键字:public、protecte...

PHP中的public、protected和private属性

OOP中的一个关键范例就是封装和对象属性(也可以叫做成员变量)的访问保护。大部分通用的OO语言都有三种主要的访问限制关键字:public、protected和private。在类定义里定义一个类成员的时候,开发者需要设置这三个修饰符的其中一种,然后再声明成员本身。

如果你熟悉PHP 3或者PHP 4的对象模型的话,那里所有的类的成员都用var关键字来定义,这样的声明方式就像PHP 5中的public。但是var还是被保留下来了,为了保持向后的兼容性,不过我们不赞成这么写,而且建议你把脚本中的var转变成新的关键字:

class MyClass {
	public $publicMember = "Public member";
	prorecred $protectedMember = "Protected member";
	private $privateMernber = "Private member";
	function myMethod(){
	//...
	}
}
$obj = new MyClass();

这个例子向大家示范三种修饰符的使用。

首先,大家来了解下面每一个访问修饰符的详细定义:

◇public。公共成员既可以通过对象外部使用$obj ->publicMember访问,也可以用特殊变量$this(例如,$this->publicMember)从内部的方法访问。如果另外一个类继承了这个公共变量,这个规则同样适用,而且从这个类的对象的外部和内部的方法都可以访问。

◇ protected。保护成员只能从对象内部的方法访问一例如,$this->protected-Member。如果另外一个类继承一个保护的成员,同样的规则也适用,而且它可以从继承类实例化的对象的方法中通过特殊的$this变量访问到。

◇private。与私有成员与保护成员类似,因为它们都只能从对象内部的方法访问。但是,私有成员不能从继承类实例化的对象的方法访问。因为私有属性在继承的类中是看不到的,而且两个相关的类可以分别声明一个名字相同的私有变量。也就是两个类都只能看到自己的私有属性,私有成员之间是没有关系的。

通常,你会用public声明成员以便从对象域(例如它的方法)外面访问到该成员,而用private声明成员为只允许对象内部逻辑访问。或者使用protected声明变量为只允许对象内部逻辑访问,但从继承类中可以访问甚至修改它的值:

class MyDbConnectionClass {
	public $queryResult;
	protected $dbHostname = "localhost";
	Drivate $connectionHandle;
	//...
}
class MyFooDotComDbConnectionClass extends MyDbConnectionClass{
	protected  $dbHostname  = "foo.com";
}

这个不完整的例子象征性地显示了每一种访问修饰符的使用方法。这个类处理一个数据库的连接,包括访问数据库查询:

◇数据库连接的句柄保存在一个private成员中,因为它是用来给类的内部逻辑使用的而且不能被这个类的使用者访问。

◇在这个例子中,数据库的主机名不能被MyDbConnectionClass类的使用者看到。如果想修改它,开发者需要从这个初始类中继承一个新的类然后修改主机名。

◇数据库查询本身是可以让开发者访问到的,所以它被声明为一个公共变量。

请注意,设置了访问修饰符后,类(或者更加具体点,它们开放给外界的接口)继承时总是保持一种“是一”的关系。因此,如果一个父类把一个成员声明为公共成员,继承的子类也必须把它声明为公共成员。否则,子类将不能与父类保持“是一”的关系,这种关系意味着你对父类做的任何修改也会影响子类。

版权声明:本文系技术人员研究整理的智慧结晶,转载勿用于商业用途,并保留本文链接,侵权必究!

本文链接:http://php.aixc.cn/phpzs/phpjc/301.html

声明:本站技术及源码均为原创,转载请勿用于商业用途,并注明出处及原文链接,侵权必究。