类跟对象的关系
类是对象的抽象(对象的描述(属性),对象的行为(方法))
对象是类的实体
面相对象的三大特征:封装、集成、多态
自定义类
Class Person{
}
属性定义
属性是类里面的成员,所以要定义属性的前提条件是需要声明一个类
Class Person{
public $name;// 属性
public $age;
public $sex;
}
方法定义
方法是定义特定功能的代码块,在类中定义方法表示,创建对象之后,对象的特定行为;
Class Person{
public function eat($food){
echo "Person can eat ".$food;
}
}
实例化对象
Class Person{
public $name;// 属性
public $age;
public $sex;
public function eat($food){
echo "Person can eat ".$food;
}
}
$person1=new Person();
属性的赋值
$person1->name="curtis";
echo $person1->name;
类方法的调用
$person1->eat("Apple");
继承(PHP是单继承,也就是一个子类只能有一个父类)
为什么要继承?
回复:为了属性、方法的重复利用;
业务场景:
有个Person类,有一个Student类;
Person里面有姓名、年龄、性别
如果Student里面再将上面的属性定义一次,那就糟蹋了继承这个神器;
Person类叫Student类的父类,Student类是Person类的之类;
Class Person{
public $name;// 属性
public $age;
public $sex;
public function eat($food){
echo "can eat ".$food;
}
}
Class Student extends Person{
public $student_id;
public function write(){
echo "I can write";
}
public function read(){
echo "I can read";
}
}
$student1=new Student();
$student1->name="curtis1";
echo $student1->name;
echo "<br />";
$student1->eat("面");
echo "<br />";
访问修饰符
public protected private
public 当前类,子类中均可访问;
protected 当前类,子类内部允许访问;
private 当前类内部允许访问;
这个地方需要重点了解:
范围
什么叫类内部?
{}内叫类内部,出了{},实例化对象的时候构造函数也是内内部;
Class Person{
public $name;// 属性
public $age;
private $sex;// 私有属性
public function eat($food){
echo "eat ".$food;
}
function __construct($sex){
echo "性别:".$sex;
}
}
Class Student extends Person{
public $student_id;
public function write(){
echo "I can write";
}
public function read(){
echo "I can read";
}
}
$person1=new Person("男");
static 关键字
为什么要有这么一个关键字?
常量
PI
静态属性 public static $PI = 3.14;
静态方法
静态成员访问方式(类外部):
类名::属性名称
在当前类中访问静态属性:
statis::属性名;
在子类内部访问父类静态成员,parent::属性名;statis::属性名;
class Person
{
public $name;
// 属性
public $age;
private $sex;
// 私有属性
public function eat($food)
{
echo "eat " . $food;
}
public static $PI = 3.14;
/**
* 构造函数
*/
function __construct($sex)
{
echo "性别:" . $sex;
}
function show(){
echo static::$PI;
}
}
class Student extends Person
{
public $student_id;
public function write()
{
echo "I can write";
}
function __construct()
{}
public function read()
{
echo "I can read";
}
public function add()
{
echo 1 + parent::$PI."<br />";
echo 2 + static::$PI;
}
}
$person1 = new Person("男");
echo "<br />";
$person1->show();
echo "<br />";
echo Person::$PI . "<br />";
$student1 = new Student();
echo Student::$PI;
echo "<br />";
$student1->add();
方法的重写
方法的重载
什么叫相同的方法,什么叫不同的方法?
回复:相同的方法:方法名称相同,方法的参数列表相同;
不同的方法:方法名称不同;方法名称相同,方法的参数列表不同;
为什么会有方法的重写?
回复:父类定义的方法子类有同样的方法,子类的中的方法要实现有自己的行为;
方法的重载
为什么会有方法的重载?
回复:类中同样一个方法名称,通过不同的参数传递实现各自的行为;
final关键字
跟方法的重写对应来的
父类中有一个final关键字修饰的方法,子类想对该方法进行重写那是不被允许的;
接口(interface)