• 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
    ";
    11     }
    12     public function jump(){
    13         echo "Jumping
    ";
    14     }
    15     //运球
    16     public function dribble(){
    17         echo "Dribbling
    ";
    18     }
    19     //投篮
    20     public function shoot(){
    21         echo "Shooting
    ";
    22     }
    23     //扣篮
    24     public function dunk(){
    25         echo "Dunking
    ";
    26     }
    27     public function pass(){
    28         echo "Passing
    ";
    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
    ";
    24     }
    25     public function jump(){
    26         echo "Jumping
    ";
    27     }
    28     //运球
    29     public function dribble(){
    30         echo "Dribbling
    ";
    31     }
    32     //投篮
    33     public function shoot(){
    34         echo "Shooting
    ";
    35     }
    36     //扣篮
    37     public function dunk(){
    38         echo "Dunking
    ";
    39     }
    40     public function pass(){
    41         echo "Passing
    ";
    42     }
    43 }
    44 //类到对象的实例化
    45 //类实例化为对象时使用关键字new,new之后紧跟类的名称和一对括号
    46 $jordan = new NbaPlayer("jordan","198cm","98kg","Bull","23");
    47 
    48 //对象中的属性成员可以通过->符号来访问
    49 echo $jordan->name."
    ";
    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
    ";
    34     }
    35     public function jump(){
    36         echo "Jumping
    ";
    37     }
    38     //运球
    39     public function dribble(){
    40         echo "Dribbling
    ";
    41     }
    42     //投篮
    43     public function shoot(){
    44         echo "Shooting
    ";
    45     }
    46     //扣篮
    47     public function dunk(){
    48         echo "Dunking
    ";
    49     }
    50     public function pass(){
    51         echo "Passing
    ";
    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
    析构函数被调用


      





        

  • 相关阅读:
    JSDoc使用指南
    听创始人讲Quora为什么选择Python
    Bootstrap model模态框与百度地图API发生冲突时的解决办法
    使用百度地图API制作线路轨迹播放
    EF+Mysql+DDD框架搭建(一)——code first准备
    RowNumber()分页方法
    设计模式六大原则
    温习.net基础知识(二)装箱和拆箱
    温习.net基础知识(一)基础知识点
    c# 跨域api
  • 原文地址:https://www.cnblogs.com/flytime/p/6889876.html
Copyright © 2020-2023  润新知