php5中oop的特性,php5中关于OOP的几个关键概念(属性)

OPP提供了很多强大的特性,属性就是一个很有说服力的例子,通过强制在方法中访问和操作字段,一方面能保护字段,同时还允许像访问公共字段一样访问数据。这些方法称为访问方法(accessor)和修改方法(mutator),或非正式地称为获取方法(getter)和设置方法(setter),它们将会分别在访问或操作字段时自动触发。

遗憾的是,PHP5没有提供其他OOP语言(如c++和java)中使用的属性功能。因此,需要使用公共方法来模拟这种功能。例如,可能需要声明两个函数getName()和setName(),为属性name分别创建获取方法和设置方法,并需要在每个函数中嵌入适当的语句。但PHP5也确实提供了对属性的某种支持,并有几种新的可能性。这是通过重载__set和__get方法来实现的。当试图引用一个类定义中不存在的成员变量时,就会调用这些方法。属性有很多用途,如产生错误消息,甚至通过动态创建新的变量来扩展类。

1、__set()

boolean __set([string property_name],[mixed value_to_assign])

修改方法(mutator)或设置方法(setter)负责隐藏字段的赋值实现,并在为类字段赋值之前验证类数据。它接受一个属性名和相应值作为输入,如果方法成功执行就返回true,否则返回false。如:

class Staff

{

var $name;

function __set($propName,$propValue)

{

$this->$propName=$propValue;

}

}

$employee = new Staff();

$employee->name="ligaofeng";

$employee->title="very good";

echo "Name:".$employee->name;

echo "
";

echo "Value:".$employee->title;

results:

Name:ligaofeng

Value:very good

2、__get()

boolen __get([string property_name])

访问方法(accessor)或获取方法(getter)负责封装获得类变量所需的代码。它接受一个属性名作为输入参数,即要获取该属性的值。成功时返回ture,失败时返回false。示例如下:

class Staff

{

var $name;

var $city;

protected $wage;

function __get($propName)

{

echo "__get method was called!
";

$vars = array("name","city");

if(in_array($propName,$vars)){

return $this->$propName;

}else{

return "Sorry,no such a variable!";

}

}

}

$employee = new Staff();

$employee->name="ligaofeng";

echo $employee->name."
";

echo $employee->wage;

?>

results:

ligaofeng

__get method was called!

Sorry,no such a variable!

3、创建自定义获取方法和设置属性

坦白地讲,虽然1、2所示的__set()和__get()方法有一些优点,但对于管理复杂面向对象应用程序中的属性而言,它们确实还不够。因为PHP不支持采用java或c#的方式来创建属性,所以你如果要实现自己的方法也可以考虑为每个私有字段创建两个方法,比如:

class Staff

{

private $name;

public function getName(){

return $this->name;

}

public function setName($name){

$this->name = $name;

}

}

?>

虽然这种策略不如使用属性那么方便,但确实通过使用标准的命名约定封装了管理和存取任务。当然,还应当向设置方法中增加另外的验证功能、、、、

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值