1.访问控制
- public——都可以访问
- protected——只有子类和自身可以访问
- private——只有自身可以访问
2.继承
- 父类里面定义的类成员,可以不用在子类里面重复定义,节约了编程的时间和代价
- 同一个父类的子类拥有相同的父类定义的类成员,因此外部代码调用他们的时候可以一视同仁
- 子类可以修改和调整父类定义的类成员。一旦子类修改了,就按照之类修改后的功能执行。我们称之为重写
- 在PHP中可以用extends关键字来表示类的继承,后面跟父类的类名
- PHP中extends后面只能跟一个类名,这就是PHP的单继承原则
3.static关键字
<?php
class Human{
public $age="10";
public static $sValue="Static Value in Human Class";
}
class NbaPlayer extends Human{
//静态属性定义是在访问控制关键字后面添加static关键字即可
public static $president="David Stern";
//静态方法定义
public static changePresident($newPresident){
//在本类定义中使用静态成员的时候,用self关键字或者static关键字后面紧跟::操作符即可。
//注意,在访问静态成员属性的时候,::后面需要跟$符号
self::$president=$newPresident;
//等价于static::$president=$newPresident;
//使用parent关键字就可以访问父类的静态成员
echo parent::$sValue;
//$this的使用必须基于对象,而静态成员是全局的
echo $this->age;//输出报错
}
}
//在类定义外部访问静态属性,我们可以用类名加::操作符的方法来访问类的静态成员。
echo NbaPlayer::$president; //输出 David Stern
NbaPlayer::changePresident("Adam Silver");
echo NbaPlayer::$president; //输出 Adam Silver
//在类外部直接访问父类的静态成员
echo Human::$sValue;
?>
- 1.静态属性用于保存类的公有数据
- 2.静态方法里面只能访问静态属性
- 3.静态成员不需要实例化对象就可以访问
- 4.类的内部可以通过self或者static关键字访问自身静态成员
- 5.可以通过parent的关键字访问父类的静态成员
- 6.可以通过类的名称在类定义外部访问静态成员
4.final成员
问题描述:
- 对于吃饭这个功能,不希望子类修改它
- 对于NBA球员这个类,不希望在创建他的子类
<?php
//定义父类
//子类中编写跟父类【方法名称】完全一致的方法可以完成对父类的重写
//对于不想被子类重写的方法,可以方法定义前面添加final关键字
//对于不想被任何类继承的类可以在class关键字之前添加final关键字
final class BaseClass{
public function test(){
echo "BaseClass::test called ";
}
//添加final关键字,能将这个方法不能在子类中重写
final public function test1(){
echo "BaseClass::test1 called ";
}
}
class ChildClass extends BaseClass{
public function test($tmp=null){
echo "ChildClass::test called ".$tmp;
}
public function test1(){
echo "ChildClass::test1 called ";
}
}
$obg=new ChildClass();
//方法的重写针对的只是方法名称
$obg->test('ll'); //输出 ChildClass::test called ll
$obg->test1();
5.数据访问补充
<?php
class BaseClass{
public function test(){
echo "BaseClass::test called ";
}
public function test1(){
echo "BaseClass::test1 called ";
}
}
class ChildClass extends BaseClass{
const CONST_VALUE="a constant value";
private static $cValue="static value";
public function test($tmp=null){
echo "ChildClass::test called ".$tmp;
用parent关键字可以访问父类中被子类重写的方法
parent::test();
//$this->called();
self::called();//等价于$this->called();
echo self::CONST_VALUE;
echo static::$sValue;//等价于echo self::$sValue;
}
public function called(){
echo "ChildClass::called() called ";
}
}
$obg=new ChildClass();
$obg->test();
//输出 ChildClass::test called BaseClass::test called
1.parent关键字可以用于调用父类中被子类重写的方法,也可以用于调用父类中定义的静态成员
2.self关键字可以用于访问类自身的成员方法,也可以访问自身静态成员和类常量;不能用于访问类自身的属性,使用常量的时候不需要再常量前面添加$符号
3.static关键字用于访问类自身定义的静态成员,访问静态属性时需要在属性前面添加$符号