面向对象的3大特性

1.封装 ****
目的:为了使一个类更加安全

做法: ****
1.将成员变量变为私有的
2.再类中做方法来间接访问成员变量
3.在方法中加入控制条件

 //一个成员变量还是可以的,但是不适用于多个成员变量(即可写也可读)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class  Ren
{
     public  $code ;    //人员代号
     public  $name ;    //人员姓名
     private  $sex ;     //人员性别
     private  $age ;     //人员年龄
     
     //构造函数:用来初始化性别
     function  __construct( $s )
     {
         $this ->sex= $s ;
     }
     
      
     //造一个修改年龄的方法   写
     function  SetAge( $a )
     {
         if ( $a >18 &&  $a <50)    //条件满足才往下进行
         {
             $this ->age= $a ;  
         }
     }
     
     //造一个获取age值得方法   读
     function  GetAge()
     {
         return  $this ->age;  
     }
}
 
//造对象
$r = new  Ren( "男" );
$r ->SetAge(60);  /条件是18-50之间的年龄,60超出了,所以显示的null<br>var_dump( $r );

//对于多个变量就可以使用下面的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
class  Ren
{
     public  $code ;    //人员代号
     public  $name ;    //人员姓名
     private  $sex ;     //人员性别
     private  $age ;     //人员年龄
     
     //构造函数:用来初始化性别
     function  __construct( $s )
     {
         $this ->sex= $s ;
     }
     
     //__set()魔术方法,给变量赋值
     function  __set( $n , $v )    //固定要有两个参数:变量名称,变量的值
     {
         if ( $n == "age"
         {
             if ( $v >18 &&  $v <50)   //限制条件
             {
                $this -> $n  $v ;   
             }
         }
         else
         {
            $this -> $n  $v ;       
         }
     }
     
     //__get()魔术方法,取变量值
     function  __get( $n )     //一个变量名
     {
         return  $this -> $n ;   
     }
     
}
 
//造对象
$r = new  Ren( "男" );
$r ->age=70;       //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数
$r ->name= "zha" ;      //自动调用__set()方法,将变量名当做第一个参数,将等号右边的值当做第二个参数
echo  $r ->sex;     //自动调用__get()方法<br>var_dump($r);

//另一个知识点

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class  Dog
{
     public  $name ;
     function  Jiao()
     {
        echo  $this ->name. "囧" ;    //注意  
     }  
     function  Setname( $n )
     {
        $this ->name= $n ;
        return  $this ;    //返回新的对象
     }
}
$d = new  Dog();
$d ->Setname( "1" )->Jiao();   //连续调对象

2.继承

父类
子类:可以继承父类的一切
重写的关键字override,子类对父类的方法

特点:单继承:一个子类只能有一个父类,一个父类可以有多

例子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class  Ren
{
     public  $name ;
     function  Say()
     {
         echo  $this ->name. "正在说话" ;
     }  
     
}
class  China  extends  Ren    //关键字 extend
{
     //子类对父类的方法进行重写
     function  Say()
     {
         parent::Say();     //在子类中调用父类的成员:找父类中的这个方法,把方法中的内容全部拿过来
         echo  "你好"
     }
}
 
$c = new  China();
$c ->Say();
var_dump( $c );

子类对父类的方法重写后,父类的方法还有,另外加了一个方法,所以输出时是:正在说话你好  

overlord 重载

重载:它可以是类中的某个方法产生多种效果,根据传入的参数不同,可以执行不同的逻辑;重载是多态中的一种:编译多态

 

3.多态
当父类引用指向子类实例的时候,由于子类对父类的方法进行了重写,父类引用在调用该方法时表现出的不同,称为多态:运行多态

条件有4个:
1.要有继承
2.父类引用指向子类实例
3.要有重写
4.调重写方法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值