在类中定义的变量我们称之为“属性(property)”,由于在实际应用中经常与数据库中的“字段”产生一定的关联,亦可称之为“字段”。属性的声明必须由访问控制关键字public(公开的)、protected(受保护的)或private(私有的)开头。本文Raksmart美国服务器为你介绍PHP类和对象之重载和魔术方法

class car {

public $brand = ‘Volkswagen’;

protected $price = 999999;

private $color = ‘red’;

function getBrand(){

return $this->brand;

}}

public属性可以在类的外部访问,而protected和private属性则只能由该类内部的方法使用。外部访问对象的属性和方法时,使用 -> 操作符。内部访问时使用$this(伪变量)调用当前对象的属性或方法。 更多内容请阅读 :PHP基础学习之数组介绍

例如以下代码:

$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不会。访问静态属性时,$符号不可遗漏。推荐阅读:如何导入和导出MYSQL数据库