静态方法static (public static $a=1) (static function)
静态方法不能访问非静态属性(变量),普通方法可以访问静态变量
public static function test(){
echo this->name;
} 这是错的。
例子:
name=$name;
}
static function enterschool($ifee){
self::$fee+=$ifee;
}
static function getfee(){
return self::$fee;
}
}
$stu1=new student("xiaohong");
/*通过类名来调用静态方法*/
// student::enterschool(300);
/*通过对象直接调用*/
$stu1->enterschool(300);
$stu2=new student("xiaoming");
$stu2->enterschool(200);
echo student::getfee();
?>
在类外部 类名::类方法名 或者 对象名->类方法名
在类内部 self::类方法名 或者 类名::类方法名
abstruct
抽象方法,只有方法的声明部分,没有方法体。是为了让子类去实现
一个类中,只要有一个抽象方法,这个类必须被声明为抽象类。子类的访问范围>=父类的访问范围
抽象方法在子类中必须被重写。
抽象类不能被实例化。如果一个类继承了某个抽象类,则它必须实现该类的所有抽象方法,要不然自己就要变成抽象类
final
我们不希望一个类被继承,我们使用final来修饰这个类。这个类将无法被继承。并且final不能修饰变量(final public $a)是错的。
如果不希望类中的某个方法被子类重写,我们可以设置这个方法为final方法,只需要在这个方法前加上final修饰符.如果这个方法被子类重写,将会出现错误。
const常量
比如 const PI=3.14
常量在定义的时候必须给初值。默认就是public,不能更改成私有或者保护。
const定义的常量与定义变量的方法不同,不需要加 $ 修饰符,名称一般都大写,这是一个约定.
我们使用 类名::常量名 来调用这个常量。但是在类的内部,我们也可以使用另外一种方法,self::常量名
所谓继承就是一个子类通过extends父类,把父类的(public,protected)属性和(public,protected)方法继承下来,在子类中访问父类的方法是 父类::方法名 或者 parent::方法名
面向对象三大特征 封装,继承,多态
控制修饰符
public 表示全局,类内部,外部和子类都能访问
protected 表示保护的,只有本类或子类可以访问
private 表示私有的,只有本类的内部可以使用
方法之间可以互相调用,但是需要使用$this引用
如果要访问protected和private修饰的的成员变量,我们可以使用__get()和__set(),但不推荐用,效率不高。
__set()对protected或private属性,进行赋值操作。
__get()获取protected或private属性的值
例子:
class A{
private $n1;
public function __set($name,$value){
$this->$name=$value;
}
public function __get($name){
if(isset($name)){
return $this->$name;
}else{
return null;
}
}
}
$a1=new A();
$a1->n1="sss";
echo $a1->n1;
多态
http://blog.csdn.net/whd526/article/details/70242918
http://www.jb51.net/article/112239.htm