PHP笔记:类和对象的属性与方法的访问控制

2018年9月21日21:55:01 2 728 次
摘要

在类中定义的变量我们称之为“属性(property)”,由于在实际应用中经常与数据库中的“字段”产生一定的关联,亦可称之为“字段”。属性的声明必须由访问控制关键字public(公开的)、protected(受保护的)或private(私有的)开头。

在类中定义的变量我们称之为“属性(property)”,由于在实际应用中经常与数据库中的“字段”产生一定的关联,亦可称之为“字段”。属性的声明必须由访问控制关键字public(公开的)、protected(受保护的)或private(私有的)开头。

class car {
public $brand = 'Volkswagen';
protected $price = 999999;
private $color = 'red';
function getBrand(){
return $this->brand;
}}

public属性可以在类的外部访问,而protected和private属性则只能由该类内部的方法使用。外部访问对象的属性和方法时,使用 -> 操作符。内部访问时使用$this(伪变量)调用当前对象的属性或方法。

例如以下代码:

$c = new car(); 
echo $c->brand; //Volkswagen
echo $c->price; //报错,受保护属性不允许外部访问
echo $c->color; //报错,私有属性不允许外部访问

类中的方法(function)和属性具有一样的访问控制方式。定义方法时加上public、protected和private关键字即可。默认状态下为public。同样的,public可通过->操作符外部访问,而protected和private方法只能通过为变量$this内部访问。

protected和private都不可外部访问,区别在哪里呢?

从字面理解,protected只是受保护而已,所有可以在本类、父类和子类中访问。而private只能在本类中访问。

静态属性:static property

使用关键字static修饰的属性称之为静态属性,相对地,未被static修饰的属性称之为普通属性。静态属性之所以为静态是应为其只属于类本身,不会随着类的实例化而被复制到对象,所以也不能通过->访问。例如:

class car {
public $brand = '';
static $num = 0;
}
$c1 = new car;
$c1->brand = 'Toyota';
//$c1->num++;  //报错,静态变量不允许->访问。
car::$num++;  //0+1
echo car::$num;  // 返回 1

$c2 = new car;
$c2->brand = 'Honda';
car::$num++;  // 1+1
echo car::$num; //返回2

从以上例子可以看出,brand属性会随着new操作而“复制”到对象,每创建一个对象就会有一个brand,而静态属性num不会。访问静态属性时,$符号不可遗漏。

avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

目前评论:2   其中:访客  1   博主  1

    • avatar 吃馒头的猫 2

      学习了