PHP面向对象(1)

一、基础

1、概念:

  类:类是具有相同属性和行为的事物的描述。对象是类的一个实例。

2.对象的特征

  属性和行为

3、面向对象实质

  面向对象就是把生活中要解决的问题都用对象的方式进行存储(属性和方法)。

4、面向对象的基本思路

  a:识别对象

  任何实体都可以被识别为一个对象。

  b:识别对象的属性

    --对象里面存储的数据被识别为属性。

    --对于不同的业务逻辑,关注的数据不同,对象里面存储的属性也不同。

   c、识别对象的行为

     --对象自己属性数据的改变

     --对象和外部交互

5、面向对象的基本原则

  a、对象内部是高内聚的

    --对象只负责一项特定的职能(职能可大可小)

    --所有对象相关的内容都封装到对象内部

6、对象对外是低耦合的

  --外部世界可以看到对象的一些属性(并非全部)

  --外部世界可以看到对象可以做某些事情(并非全部)

7、类的实例化

  --创建一个类的对象

  代码:

  --如何定义一个类

  --如何实例化类的对象

  --如何调用类的方法

  --构造函数

  --析构函数

 1 <?php
 2 class NbaPlayer{
 3     public $name = "Jordan";
 4     public $height = "198cm";
 5     public $weight = "98kg";
 6     public $team = "Bull";
 7     public $playerNumber = "23";
 8     //定义方法
 9     public function run(){
10         echo "Running\n";
11     }
12     public function jump(){
13         echo "Jumping\n";
14     }
15     //运球
16     public function dribble(){
17         echo "Dribbling\n";
18     }
19     //投篮
20     public function shoot(){
21         echo "Shooting\n";
22     }
23     //扣篮
24     public function dunk(){
25         echo "Dunking\n";
26     }
27     public function pass(){
28         echo "Passing\n";
29     }
30 }
31 //类到对象的实例化
32 //类实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号
33 $jordan = new NbaPlayer();
34 //对象中的属性成员可以通过->符号来访问
35 echo $jordan->name."<br/>";
36 $jordan->dribble();
37 $jordan->pass();

运行效果:

  加上构造方法: 

function  __construct(){
echo "IN NbaPlayer Construct"."<br/>";
}

运行效果:
IN NbaPlayer Construct
Jordan 198cm
Dribbling Passing

加上析构方法:
 
function __destruct(){
echo "析构函数被调用";
}

运行效果:
IN NbaPlayer Construct
Jordan 198cm
Dribbling Passing 析构函数被调用

带参数的构造函数:
 1 <?php
 2 class NbaPlayer{
 3     public $name = "Jordan";
 4     public $height = "198cm";
 5     public $weight = "98kg";
 6     public $team = "Bull";
 7     public $playerNumber = "23";
 8 
 9     function  __construct($name,$height,$weight,$team,$playNumber){
10         $this->name = $name;
11         $this->height = $height;
12         $this->weight = $weight;
13         $this->team = $team;
14         $this->playNumber = $playNumber;
15 
16     }
17     function __destruct(){
18         echo "析构函数被调用";
19     }
20 
21     //定义方法
22     public function run(){
23         echo "Running\n";
24     }
25     public function jump(){
26         echo "Jumping\n";
27     }
28     //运球
29     public function dribble(){
30         echo "Dribbling\n";
31     }
32     //投篮
33     public function shoot(){
34         echo "Shooting\n";
35     }
36     //扣篮
37     public function dunk(){
38         echo "Dunking\n";
39     }
40     public function pass(){
41         echo "Passing\n";
42     }
43 }
44 //类到对象的实例化
45 //类实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号
46 $jordan = new NbaPlayer("jordan","198cm","98kg","Bull","23");
47 
48 //对象中的属性成员可以通过->符号来访问
49 echo $jordan->name."\n";
50 echo $jordan->height."<br/>";
51 $jordan->dribble();
52 echo "<br/>";
53 $jordan->pass();
54 echo "<br/>";
55 $james = new NbaPlayer("James","203cm","120kg","Heat","6");
56 echo $james->name."<br/>";

运行效果:

jordan 198cm
Dribbling 
Passing 
James
析构函数被调用析构函数被调用


二、面向对象继承
继承好处:
--父类里面定义的类成员可以不用在子类中重复定义,节约了编程的时间和代价。
  比如,人的吃这个方法一旦在父类中定义,那么NBA球员和女主播两个子类就
  不需要实现吃这个方法了,就好像天生就有这个功能一样
--同一个父类的子类拥有相同的父类定义的类成员,因此外部代码调用它们的时候可以
  一视同仁
  比如,一个NBA球员和一个女主播,因为他们都是人,所以可以直接调用父类定义的
  “吃”方法,而不用管他(她)到底是个NBA球员还是女主播
--子类可以修改和调整父类定义的类成员
  我们称为重写(overwrite),一旦子类修改了,就按照子类修改之后的功能执行。

代码:
 1 <?php
 2 
 3 
 4 class Human{
 5      public $name;
 6     public $height;
 7     public $weight;
 8 
 9     public function eat($food){
10         echo $this->name."  is eating  ".$food."<br/>";
11     }
12 }
13 //单继承
14 class NbaPlayer extends Human{
15 
16     public $team = "Bull";
17     public $playerNumber = "23";
18 
19     function  __construct($name,$height,$weight,$team,$playNumber){
20         $this->name = $name;//父类中的属性可以用this来访问
21         $this->height = $height;
22         $this->weight = $weight;
23         $this->team = $team;
24         $this->playNumber = $playNumber;
25 
26     }
27     function __destruct(){
28         echo "析构函数被调用";
29     }
30 
31     //定义方法
32     public function run(){
33         echo "Running\n";
34     }
35     public function jump(){
36         echo "Jumping\n";
37     }
38     //运球
39     public function dribble(){
40         echo "Dribbling\n";
41     }
42     //投篮
43     public function shoot(){
44         echo "Shooting\n";
45     }
46     //扣篮
47     public function dunk(){
48         echo "Dunking\n";
49     }
50     public function pass(){
51         echo "Passing\n";
52     }
53 }
54 //类到对象的实例化
55 //类实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号
56 $jordan = new NbaPlayer("jordan","198cm","98kg","Bull","23");
57 
58 echo $jordan->name.'<br/>';
59 $jordan->eat("Apple");

运行效果:

jordan
jordan is eating Apple
析构函数被调用


  





    

posted @ 2017-05-22 15:54  fly-time  阅读(121)  评论(0编辑  收藏  举报