IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP面向对象的程序设计 -> 正文阅读

[PHP知识库]PHP面向对象的程序设计

面向对象知识点

主要介绍了PHP面向对象程序设计方法,结合实例形式详细分析了PHP面向对象程序设计中所涉及的类的概念、定义、构造函数、析构函数、继承、重写,$this::需要的朋友可以参考下

一、概念

面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构,它能使代码更加简洁,更易于维护,并且具有更强的可重用性。

二、定义类

定义:类的变量 属性的声明有: private > protected > public 数据类型:1、基本数据类型(整型int、浮点型float、字符串string、布尔bool);2、复合数据类型(数组array、对象object);3、特殊数据类型(null、资源)

class 类名 { }   //类首字母大写

三、定义属性和方法

公有的 public

public $name;

受保护的 protected

protected $age;

私有的 private

private $id;

1、方法

public function study(){
echo "在学习";
}

四、访问属性和方法

1、访问属性

需要先实例化对象 new

$opp = new 类名;
$opp -> study(); //调用访问方法

2.方法的参数

public function study(){
...
}

3.方法默认值

public function study($name="小明"){
     echo $this -> name;
}

4.方法返回值

return '需要返回的值'

五、修改属性的值

1.直接修改

public $name="要修改的值";

2.使用方法修改$this

$this -> name="要修改的值";

六、权限修饰符

公有的 public 
私有的 private 
受保护的 protected 

七、构造方法

public function _ _construct(){
     ...
}

八、析构方法

public function __destruct(){
 // 释放该对象的资源
}

九、继承

可继承父类的成员变量,允许定义父类没有的成员变量。

关键字 extends
格式 class 类名 extends 需要继承的类{
...
}

1.单继承

PHP是单继承的,一个扩充类只能继承一个基类,但一个父类却可以被多个子类所继承。子类不能继承父类的私有属性和私有方法。在PHP 5之后的版本中,类的方法可以被继承,类的构造函数也能被继承。当子类被实例化时,PHP会先在子类中查找构造方法,如果子类有自己的构造方法,PHP会优先调用子类中的构造方法;当子类中没有时,PHP会转而去调用父类中的构造方法。

class Person //定义人类
{
    public $name; //定义姓名
    protected $age; //定义年龄
}
class Man extends Person  //定义男人类并继承人类的成员变量
{
    public $sex;  //定义父类没有的成员变量
    public function sayName(){ //成员方法
       echo $this -> $name="小红"; //输出继承的姓名
 }
}
$people = new Man(); //实例化对象
$people -> sayname(); //访问成员方法

2.重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,该过程叫做方法的覆盖(override),也称为方法的重写。在对父类的方法进行重写时,子类中的方法必须与父类中对应的方法具有相同的名称。

重写时方法的权限修饰符不能比父类严格

<?php
class person
{
    public $name;
    public function  __construct(){
        $this->name="小娃";
    }
    public function sayName(){
        echo "我是小娃";
    }
}
class Student extends person
{
    public $student_number;
    public function sayName() //重写父类的方法
    {
        echo "我是小洋";
    }
}
$person = new Student();
$person ->sayName();

十、$this->::的使用

1、this

系统会给每个对象分配this,代表当前对象 this 只能在类内部方法中使用,不能在类定的的外部使用。

$this->name;
$this->name=" ";

2、::

相对只能在类内部使用的伪变量$this->来说,操作符“::”更为强大。它可以在没有声明任何实例的情况下访问类中的方法或变量。其使用格式如下:

关键字::变量名/常量名/方法名
parent::study(); //调用父类的study方法

此处的关键字可以为以下3种情况。
parent:用于调用父类中的成员变量、成员方法和常量。
self:用于调用当前类中的静态成员和变量。
类名:用于调用本类中的变量、常量和方法。

<?php
class person
{
    public $name;
    public function  __construct(){ //构造函数
        echo 1;
    }
}
class Student extends person
{
    public function __construct()
    {
        person::__construct(); //调用父类的构造函数
        echo 2;
    }
}
$person = new Student(); //实例化子类

输出结果为12

十一、静态变量(方法)

1、static 关键字

static关键字的作用是将类的成员属性或成员方法标识为静态

类调用:名::静态成员属性名;
类调用:类名::静态成员方法名();
对象调用:对象名::静态成员属性名;
对象调用:对象名::静态成员方法名;

<?PHP
  class People
  {
    public static $age=19;  //定义静态成员属性
    public static function getAge()
    {
      echo "调用静态方法";
    }
  }
    echo People::$a;   //People 类调用属性,输出结果为19。不需要实例化
    echo People::getAge(); // People 类调用方法,不需要实例化,输出结果为 "调用静态方法"
    $example = new People(); //实例化一个对象
    echo $example::$a;      //实例化的对象调用属性 输出结果为19
    echo $example::getAge(); //实例化对象调用方法 输出结果为  "调用静态方法"

?>

2、self

访问静态变量

class Person4
{
    // static 表示静态的
    public static $age = 21;
    public $age2 = 30;

    public function getAge()
    {
        // 在类内访问静态的成员变量
        echo self::$age;
        self::$age++;
        echo '<br />';
    }

    // 定义静态方法
    // 在静态方法中不能用 $this
    public static function getAge2()
    {
        echo '我的年龄是:' . self::$age;
        echo '<br />';
    }
}

在这里插入图片描述

十二、final

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

final class People{  //使用final标记的类,不能被继承,不能有子类
 ...
}
class People{
 final function Man(){  // 在类中使用final标记的方法,在子类中不可以重写和覆盖
 ...
 }
}

十三、const 常量

const是一个定义常量的关键字。调用const 常量和静态成员(static)是一样的。在类外通过类名访问,在成员方法中使用self关键字进行访问。注:const标识的常量是一个恒值,不能重新赋值,所以一定要在定义的时候初始化。使用 const 声明的常量名称前不能使用$符号,并且常量名通常是大写。

class Person 
{
  const NUMBER=123;//定义常量
  public function Man()
  {
    echo self::NUMBER; //在类内调用常量NUMBER
    echo Person::NUMBER; //也可以写为类名::常量
 }
}
$a= new Person(); //实例化对象
$a ->Man(); //访问成员方法

十四、抽象类和抽象方法

abstract

1、抽象类

abstract class Person //使用abstract标记的类,不能被实例化
{
  static  public  $age=19;
}
 echo People1::$age; // 可以访问静态变量

2、抽象方法

只要类中存在一个抽象方法,那这个类就必须为抽象类,方法抽象后在子类必须重写

// abstract 声明抽象类
// 抽象类不能被实例化,只能作为其它类的父类来使用
// 只要一个类中存在一个抽象方法,该类就必须为抽象类
abstract class People1
{
    public  $age=19;
    public abstract function getAge();  // 声明抽象类中的抽象方法,抽象方法不能有方法体。
}
class Person1 extends People1
{
    public  function getAge() // 子类当中必须重写父类中所有的抽象方法
    {                          // 重写的方法权限只能更宽松
        echo 2;
    }
}
$a= new Person1();
$a->getAge();

十五、魔术方法

1、__set()

在给不可访问属性赋值时,__set() 会被调用 语法为__set($name,$value)。 参数$name是指要操作的变量名称

    // 给一个未定义的属性赋值时
    // 两个参数均不能省略
   class Magic
   { 
         public function __set($name, $value)
     {
         echo '__set()执行,';
     }
   }
   $test = new Magic();
   $test->name="小娃"; //给未定义属性赋值 调用__set()

2、__get()

当读取不可访问属性的值时,__get()会被调用 语法为 __get($name) $name指要操作的变量名称

class Magic
{
    // 当调用一个未定义或不可见(私有)的成员变量时
    private $age=19;
    public function __get($name) 
    {
        echo '__get()执行';
    }
}
    $test = new Magic();
    $test->name;  //读取不可访问的成员变量的值 调用__get()
    $test->age;   //读取私有的成员变量的值 调用__get()

3、__call()

当读取不可访问属性的值时,__call()会被调用 语法为 __call($name,$params) $name指要操作的变量方法 $params为数组

class Magic
{
    // 当调用不存在或不可见的成员方法时
    public function __call($name, $params)
    {
        echo '__call()执行';
        echo '你调用了不存在的方法:' . $name;
        echo '<br />';
        echo '传递的参数为:';
        print_r($params);
    }
}
     $test = new Magic();
     $test->name(1,2); //访问不存在的成员方法 调用__call() 也可用于访问私有的成员变量

3、__toString()

class Magic
{
     public function __toString()
    {
        return "123";
    }
}
   $test = new Magic();
   echo  $test;
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-09-04 00:50:49  更:2022-09-04 00:51:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 14:28:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码