属性声明是由关键字:protected,private,public这三个关键词定义
属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指 PHP 脚本在编译阶段时就可以得到其值,而不依赖于运行时的信息才能求值;
在类的成员方法里面可以用->(对象运算符) :$this->property这种方式来访问非静态属性;
静态属性则是用 ::
(双冒号):self::$property 来访问;当一个方法在类定义内部被调用时,有一个可用的伪变量 $this。$this 是一个到主叫对象的引用;
静态属性:用static声明;
静态属性调用:声明类属性或方法为静态,就可以不实例化类而直接访问。静态属性不能通过一个类已实例化的对象来访问(但静态方法可以);
<?php class Foo { public static $my_static = 'foo'; public function staticValue() { return self::$my_static; } } class Bar extends Foo { public function fooStatic() { return parent::$my_static; } } print Foo::$my_static . "\n"; $foo = new Foo(); print $foo->staticValue() . "\n"; // print $foo->my_static . "\n"; // 未定义的 "属性" my_static print $foo::$my_static . "\n"; $classname = 'Foo'; print $classname::$my_static . "\n"; print Bar::$my_static . "\n"; $bar = new Bar(); print $bar->fooStatic() . "\n"; ?>
访问控制
public(公有)被定义为公有的类成员可以在任何地方被访问;
protected(受保护):被定义为受保护的类成员则可以被其自身以及其子类和父类访问;
private(私有):被定义为私有的类成员则只能被其定义所在的类访问;
类:类属性必须定义为公有,受保护,私有之一;
方法(函数):类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有;
常量:类的常量可以定义为公有、私有或受保护。如果没有设置这些关键字,则该常量默认为公有;
同一个类的对象即使不是同一个实例也可以互相访问对方的私有与受保护成员。这是由于在这些对象的内部具体实现的细节都是已知的。
<?php class Test { private $foo; public function __construct($foo) { $this->foo = $foo; } private function bar() { echo 'Accessed the private method.'; } public function baz(Test $other) { // We can change the private property: $other->foo = 'hello'; var_dump($other->foo); // We can also call the private method: $other->bar(); } } $test = new Test('test'); $test->baz(new Test('other')); ?>