在类中定义的变量我们称之为“属性(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数据库