面向对象的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.调重写方法

posted @ 2017-04-04 17:59  张柯宇  阅读(218)  评论(0编辑  收藏  举报
友情链接:回力鞋专卖店 | 中老年服装 | 新航道 | 雅思培训机构 | 雅思培训强化班