面向对象编程的三大特性

面向对象编程的三大特性:

封装,继承,多态;

抽象;研究问题的方法;

封装;通过访问修饰符控制用户的权限 对成员属性的访问

public,private,protected;

public 表示全局,可以在类的内部,外部,子类中使用

protected 表示受到保护的,可以在本类,子类中使用

private 表示私有的,只能在本类中使用


通常提供public方法去访问protected和private变量

可用__set() __get()方法来访问protected和private的属性;
(不推荐)

继承:
提高代码的复用性,减少代码的冗余度;
抽取类的共有属性和方法,形成父类,让别的类继承它;
<?php

    //应用场景 开发一套学生管理系统(pupil,graduate,)
    class stu{
    
        public $name;
        protected $age;
        protected $grade;

        public function showinfo(){
        
            echo $this->name."||".$this->age;
        
        }

    
    }
    class pupil extends stu(){
    
        public function tesing(){
        
            echo "小学生考试";
        
        }
    
    }

    class graduate extends stu(){
    
        public function tesing(){
        
            echo "研究生考试";
        
        }
    
    }
$stu1=new pupil();
$stu2=new graduate();
?
从上面代码我们可以看出
 所谓继承就是一个子类 通过 extends 父类   把父类中的(public、protected)
 属性和方法继承下来

  不能继承private属性和方法

  语法

    class 类名 extends 父类名{

    }
当创建子类对象的时候,默认不会自动调用父类的构造方法;

在子类中调用父类中的构造方法或者成员方法(protected/public)
  语法是:父类名::方法名  或者  parent::方法名  变量直接用$this->变量名


重载:
 函数名一样,通过函数的参数个数或者是参数类型不同,达到调用
 同一个函数名,但是可以区分不同的函数;

php5中通过提高的“魔术”函数,以实现重载;

<?php

    class aa{

        public function test1($p){
            echo "world";
    }
        public function test2($p){
    
            echo "hello";
        }
//__call($method,$p) $method是接受test $p是接受参数;
        function __call($method,$p){

            if($method=="test"){
            
            
                if(count($p)==1){
                
                    $this->test1($p);
                
                }
                else if(count($p)==2){
                
                    $this->test2($p);
                
                }
            
            }
        }
    }
$p=new aa();
$p->test(12);
//$p->test(12,23);

?>

php中的魔术常量:
__LINE__查看所在行数;
__FILE__查看文件所在的路径;
__CLASS__查看所在方法在哪个类;
__FUNCTION__查看目前所在哪个方法;

方法的重写/方法的覆盖(override)

当一个父类知道所有的子类都可以抽象出一个方法,但父类不能
确定该方法的写法,就可以用到子类覆盖;
<?php

    //抽象一个animal类

    class animal{
    
        public $name;
        protected $price;

        function cry(){
        
        }
    
    }
    class dog extends animal{
    
        function cry(){
            //覆盖
        
            echo "小狗叫";
        }

    }
    class pig extends animal{
    
    }
    //创建一只狗
    $dog1=new dog();
    $dog1->cry();

?>
细节:子类的方法名和参数都是一样的,
 在重载的时候 访问修饰符可以不一样  但是子类的访问范围>=父类的范围;
 
多态:体现在子类没有覆盖父类的方法则调用父类的方法,覆盖了就调用自己的;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值