2022/11/26 PHP笔记5 ---面向对象

一、基本概念

  • 类:属性和方法的集合
  • 对象:是类进行实例化后的产物
  • 三大特点:

1.封装性(信息隐藏)

2.继承性:派生类(子类)自动继承一个或多个基类(父类)中的属性和方法,并可以重写或添加新的属性或方法 

3.多态性:同一类的不同对象,使用同一个方法可以获得不同的结果。

二、

1.类的定义

<?php

    class 类名 {       #用大括号将内容括起来,注意大括号的位置,大括号{前有一个空格    

    成员属性;                
    成员方法;       

    }

?>

2.对象的创建(实例化类)

$对象名 = new 类名 ([参数1,参数2...]) ;
  • new 表示创造一个新的对象,通过 new 关键字 实例化对象
  • 创建对象成功后,就可以通过 $对象->成员方法/ $this -> 成员方法 来访问/调用类中的对象(类中的函数被称为成员方法);this ->表示调用本类中的成员方法/变量,后面的变量名没有$符号的
  • 系统会给每个对象分配this,代表当前对象
    this 只能在类内部方法中使用,不能在类定的的外部使用。
  • 若不需要传递参数,可省略类名后的括号
  • 使用“->”符号连接对象和方法名来调用方法,后面要带圆括号
  • 类中的变量,也称为成员变量

定义成员变量和成员方法:关键字(修饰符) 成员变量名

关键字可以使用public ,private, protected, static 中的任意一个(访问与类对象的访问一致)

    //声明一个类
	class Book{              
		public $name='PHP学习';   //定义成员变量
		
		public function getName(){   //构造函数
			return $this->name;
		}
	}
	//实例化一个对象
	$book = new Book();
	
	//访问类的对象成员
	echo $book->name;//输出 PHP学习(name的值已经给出,不需再加括号())
	
	//访问类的对象方法
	echo $book->getName();//输出 PHP学习  

3.构造函数和析构函数

  •  构造函数是在初始化对象时使用的,如果类中没有构造方法,PHP 会自动生成一个构造函数,自动生成的构造方法是没有参数的
访问修饰符:private、protected、public 默认 public

构造方法:

修饰符 function __construct(参数列表){   //两个下划线_
     //初始操作
}

例:

<?php
class hobby {
    public $food;   //定义成员变量
    public $sports;
    public function speak() {   //声明成员方法
        echo "I like".$this->food."and I don't like".$this->sports."。<br>";
    }
}
$p1=new hobby();    //实例化类,并传递参数
$p1->food="eat shaokao";   //执行类中的方法
$p1->sports="run";
$p1->speak();
?>
  •   析构函数的作用和构造方法方法刚好相反,是对象被销毁时被调用的,作用是释放内存

没有任何变量引用这个对象时,该对象就成为垃圾,PHP会自动将其在内存中销毁,垃圾处理机制

function__destruct(){   //两个下划线_
   //清理操作
}

 定义:在到某个对象的所有引用都被删除或者当对象被显式销毁时执行,说白了就是对象调用结束前
场景:析构函数是在对象被销毁前, 给程序员一个机会,去释放该对象分配的相关资源的, 比如数据库链接, 比如你打开的文件,比如绘图的句柄

例:

<?php
 class Person{
     
    public function show() {
        echo 'How are you?<br>';
     }
     //声明析构方法,在对象销毁前自动调用
    function __destruct(){
         echo '对象被销毁';
     }
 }
 $p1=new Person();   //实例化类,创建对象
 $p1->show();  //调用类的对象
?>

   4.类常量

  • 定义类常量的格式:

const 常量名 = 常量值

  • 常量输出的格式:

类名::常量名

注:两个冒号“::”称为作用域操作符,使用这个操作符可以在不创建对象的情况下调用类的常量、变量、方法。

三、继承和多态的实现

1.继承

派生类(子类)自动继承一个或多个基类(父类)中的属性和方法,并可以重写或添加新的属性或方法

语法格式:

class subClass extends superClass{
    ...
}
//subClass为子类名称,superClass为父类名称

注:

1)父类的 private 修饰的属性和方法,在子类中不能使用

2)子类最多只能继承一个父类(指直接继承)

3)在创建某个子类对象时,默认情况下会自动调用其父类的构造函数

4)如果在子类中需要访问其父类的方法(构造方法/成员方法 方法的访问修饰符是(public/protected),可以使用 父类::方法名(或者 parent::方法名 ) 来完成
5)如果子类(扩展类)中的方法和父类(基类)方法相同,我们称为方法重写

2.多态

存在两种形式:覆盖和重载

  • 所谓覆盖就是在子类中重写父类的方法,而在两个子类的对象中虽然调用的是父类相同的方法,但返回的结果是不同的。
  • 所谓重载,就是函数或者方法有相同的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者重载方法。

四、“::”的使用

这个操作符可以在不创建对象的情况下调用类的常量、变量、方法。

格式:

关键字::变量名/常量名/方法名

关键字:1)parent:可以调用父类中的成员变量、成员方法、常量

               2)self:可以调用当前类中的静态成员和常量

               3)类名:可以调用本类中的变量、常量、方法

例:

<?php
  class book{
      const name = 'computer'     //声明常量name
      function__construct(){     //构造方法
          echo'图书为:'.book::name.'';  //类名::常量 >>图书为computer
      }
  }
  class abook extends book{    //book类的子类
      const name='foreign language';   //声明常量name
      function__construct(){
          parent::__construct();      //patrnt::方法名  调用父类的构造方法
          echo'图书为:'.self::name.'';  //self::常量名  >>图书为foreign language
      }
  }
  $obj = new abook();   //实例化对象
?>

五、关键字

public、prive、protected、static、final

1.public(公共成员)

在程序中任何位置都能被其他的类和对象调用

对于成员方法,若没有写关键字,则默认为public

2.prive(私有成员)

只能在所属类中被调用和修改

3.static

声明类属性或方法为 static(静态),就可以不实例化类而直接访问

静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。

由于静态方法不需要通过对象即可调用,所以伪变量 $this 在静态方法中不可用。

静态属性不可以由对象通过 -> 操作符来访问。

4.Final

如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值