PHP 4 使用 var 来声明类的属性,在PHP5之后不再使用,PHP5.3之前使用被警告,PHP5.3之后可以用在 public 之前或单独使用作为 public 的别名。
这三个访问控制关键字也可以修饰构造函数,当 private 和 protected 修饰类的构造函数时,你只能通过一个 publice static 的静态方法来调用构造函数以实例化对象,因为该函数无法在类之外被访问了,比如,单例类的实现:
class Singleton {
private static $instance=null;
public $k = 88;
private function __construct(){
}
public static function getInstance(){
if(self::$instance==null){
self::$instance = new self();
}
return self::$instance;
}
public function __clone(){ //pretend clone oprationg
throw('Singleton class can not be cloned');
return self::getInstance();
}
}
//new Singleton(); // Error
$in = Singleton::getInstance();
2、继承禁止: final 关键字,仅用于修饰类或类的方法
如果一个类被 final 修饰,这个类不能被继承,如果一个方法被final 修饰,则这个方法不能被子类重写(override)。
class Myclass{
public $prop = 123;
final public static function methodA(){//不可继承的,公开的静态方法
return 'this is a final method';
}
}
abstract class Myclass{
public $prop = 123;
abstract public function methodA(); //抽象方法没有实现函数体
}
4、类的常量及其访问:类的常量不能使用访问限制修饰符,他是 public 的,可继承,可以被子类重写,访问类的常量必须使用双冒号 :: ,可以使用类名或类的实例来访问,因为是常量,所以名称不能使用表示变量的符号 $ 。
class Myclass{
public $prop = 123;
const x =999;
public static function methodA(){
return 'this is a final method';
}
public function getConst(){
return self::x; //或者 $this::x;
class P{
const m = 100;
const n = self::m;
static $k = 99;
public function getStatic(){
return self::$k;
}
public function getStatic2(){
return static::$k;
}
}
class S extends P{
const m=200;
static $k = 88;
public function getPConst(){
return parent::n;
}
}
7、类的继承中的 重写问题:
重写的成员的访问控制程度不能被缩小,例如, public 的成员不能重写为 protected
非静态成员不能重写为静态成员,静态成员也不能重写为非静态成员
8、接口中定义的方法必须是 public
类在实现接口的方法时,这些方法也必须是 public 的,具体实现的(不能是 abstract )。
接口也可以定义接口常量,用法与类常量完全一致,但是接口不可以定义非函数成员。
接口与接口之间可以继承,接口的继承可以是多继承,用逗号隔开(字类与父类的继承是单继承的)
一个类可以实现多个接口,用逗号隔开
interface Ix extends Iy,Iz{
public function a();
}