PHP OOP

类跟对象的关系
类是对象的抽象(对象的描述(属性),对象的行为(方法))
 
对象是类的实体
 
面相对象的三大特征:封装、集成、多态
 
自定义类
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)
 
 
posted @ 2016-03-14 12:56  Curitis  阅读(1175)  评论(0编辑  收藏  举报