PHP 面向对象详解

PHP 面向对象详解

什么是面向对象编程

面向对象编程 (OOP) 是一种编程范式,它将现实世界中的对象抽象为程序中的对象,并且对象间可以相互通信、相互协作,从而更好的解决复杂的编程问题。

面向对象编程的特点

  • 封装性:将对象的属性和方法封装在一个类中,不被外部所访问,只能通过类提供的接口来进行访问。

  • 继承性:子类能继承父类的属性和方法,并且能够在此基础上进行扩展和修改。

  • 多态性:同一个类的不同对象调用相同的方法,会有不同的实现结果。

面向对象编程的四大支柱

  1. 封装(Encapsulation):将数据和方法包装在一个类中,防止外部直接访问数据和方法,只能通过公开的或被保护的接口进行访问。

  2. 继承(Inheritance):子类可以继承父类的属性和方法,并且能够在此基础上进行扩展和修改,减少冗余代码。

  3. 多态(Polymorphism):同一个类的不同对象调用相同的方法,会有不同的实现结果,灵活性更高。

  4. 抽象类和接口(Abstraction):抽象类是一种特殊的类,不能直接实例化,只能被继承,其中可能包含有抽象方法,而接口只能包含有抽象方法,不能包含有属性和方法的实现,需要实现类来实现。

PHP 面向对象的基本使用方式

  1. 声明一个类

使用 class 关键字声明一个类,类名第一个字母一般大写。声明一个类可以包含有属性和方法。

class Person {
  public $name;
  public $age;

  public function sayHello() {
    echo "Hello, I am " . $this->name . ", " . $this->age . " years old";
  }
}
  1. 实例化一个对象

使用 new 关键字创建一个类的对象,可以通过 -> 访问对象的属性和方法。

$person = new Person();
$person->name = "Tom";
$person->age = 18;
$person->sayHello(); // 输出:Hello, I am Tom, 18 years old.

示例1:简单的计算器程序

下面是一个简单的计算器程序的示例代码。这里定义了一个 Calculator 类,包含 addsubtractmultiplydivide 四个方法来完成加减乘除的操作。

class Calculator {
  public function add($a, $b) {
    return $a + $b;
  }

  public function subtract($a, $b) {
    return $a - $b;
  }

  public function multiply($a, $b) {
    return $a * $b;
  }

  public function divide($a, $b) {
    if ($b == 0) {
      throw new Exception("Division by zero");
    } else {
      return $a / $b;
    }
  }
}

// 使用示例
$calculator = new Calculator();
echo $calculator->add(1, 2); // 输出:3
echo $calculator->subtract(4, 2); // 输出:2
echo $calculator->multiply(3, 5); // 输出:15
echo $calculator->divide(10, 5); // 输出:2
try {
  echo $calculator->divide(8, 0); // 抛出异常:Division by zero
} catch(Exception $e) {
  echo $e->getMessage();
}

示例2:商品购物车程序

下面是一个简单的商品购物车程序的示例代码。这里定义了一个 Product 类和 Cart 类,其中 Product 类表示一个商品,包含商品的名称、价格和库存等信息,Cart 类表示一个购物车,包含添加商品到购物车(addProduct)、删除购物车中的商品(removeProduct)和计算购物车中商品的总价值(calcTotalPrice)等方法。

class Product {
  public $name;
  public $price;
  public $stock;

  public function __construct($name, $price, $stock) {
    $this->name = $name;
    $this->price = $price;
    $this->stock = $stock;
  }
}

class Cart {
  private $products = [];

  public function addProduct($product, $num = 1) {
    if ($product->stock < $num) {
      throw new Exception("Stock not enough");
    }
    if (isset($this->products[$product->name])) {
      $this->products[$product->name]->num += $num;
    } else {
      $this->products[$product->name] = new stdClass();
      $this->products[$product->name]->product = $product;
      $this->products[$product->name]->num = $num;
    }
    $product->stock -= $num;
  }

  public function removeProduct($name, $num = 1) {
    if (!isset($this->products[$name])) {
      throw new Exception("Product not exist");
    }
    if ($this->products[$name]->num < $num) {
      throw new Exception("Product not enough");
    }
    $this->products[$name]->num -= $num;
    if ($this->products[$name]->num == 0) {
      unset($this->products[$name]);
    }
    $this->products[$name]->product->stock += $num;
  }

  public function calcTotalPrice() {
    $sum = 0;
    foreach ($this->products as $item) {
      $sum += $item->product->price * $item->num;
    }
    return $sum;
  }
}

// 使用示例
$cart = new Cart();
$product1 = new Product("iPhone12", 7999, 50);
$product2 = new Product("iPad Pro", 8999, 30);
$cart->addProduct($product1, 2);
$cart->addProduct($product2, 1);
echo $cart->calcTotalPrice(); // 输出:$24797
$cart->removeProduct("iPhone12", 1);
echo $cart->calcTotalPrice(); // 输出:$16798
try {
  $cart->addProduct($product2, 31); // 抛出异常:Stock not enough
} catch(Exception $e) {
  echo $e->getMessage();
}

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP 面向对象详解 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • 微信小程序 自定义创建详细介绍

    下面是详细讲解“微信小程序自定义创建详细介绍”的完整攻略。 一、创建小程序 进入微信公众平台,登录并进入开发者工具页面。 点击左侧导航栏中的“开发”按钮,在页面右侧的菜单栏中选择“开发设置”。 在“开发设置”页面中,点击“添加开发者”按钮,填写相关信息,并勾选“我已知晓该操作不可逆”,最后点击“提交”按钮。 返回“开发者工具”页面,点击左侧导航栏中的“小程序…

    other 2023年6月25日
    00
  • docker部署springboot和vue项目的实现步骤

    下面是Docker部署Spring Boot和Vue.js的实现步骤的完整攻略。 1. Docker安装 首先,需要在目标机器上安装Docker。可以参考Docker官方文档进行安装。 参考示例: # Ubuntu 18.04 LTS下安装Docker sudo apt update sudo apt install docker.io # 启动Docker…

    other 2023年6月27日
    00
  • Python 内置方法和属性详解

    Python 内置方法和属性详解 Python 是一门广泛应用于科学计算、自然语言处理、Web 开发等领域的高级编程语言,其内置了丰富的方法和属性,对于 Python 开发者来说,掌握这些内置方法和属性对于开发高效、简洁、可读性强的 Python 代码非常重要。 本文将对 Python 的内置方法和属性进行详细讲解,帮助大家深入理解 Python 的内置功能…

    other 2023年6月27日
    00
  • 怎么隐藏文件夹

    隐藏文件夹的方法会因操作系统不同而有所不同,我会为您提供Windows和MacOS两个操作系统的方法。 Windows 在Windows上,隐藏文件夹需要进行以下步骤: 首先找到要隐藏的文件夹,右键单击它并选择“属性”。 在“属性”窗口的“常规”选项卡中,勾选“隐藏”。 点击“应用”按钮,然后点击“确定”按钮。 这样就能隐藏文件夹了。要查看隐藏的文件夹,需要…

    其他 2023年4月16日
    00
  • Java 链表的定义与简单实例

    Java链表是一种线性数据结构,它由一个个节点串联起来,每个节点保存了数据元素和指向后续节点的引用。链表可以用于在数据的插入、删除、读取等操作中,灵活地调整数据的排列顺序,因此在Java中被广泛应用。 链表的定义 Java中常用的链表有单向链表和双向链表。单向链表每个节点只保存了指向后续节点的引用,而双向链表除了保存指向后续节点的引用,还保存了指向前继节点的…

    other 2023年6月27日
    00
  • app是什么意思 智能手机应用程序

    什么是app? App全称为Application,意为应用程序。它是一种在智能手机、平板电脑、智能手表等移动终端设备上运行的程序,具有各种各样的功能,比如社交、游戏、新闻、音乐等等。App可以从应用商店下载安装到设备中,用户可以随时通过app来完成相关的任务,例如聊天、浏览网站、购物等。 app的种类 目前市面上的app种类有很多,例如: 游戏类app 游…

    other 2023年6月25日
    00
  • 360N7pro怎么开启开发者选项?360N7pro开发者选项打开教程

    完整攻略:360N7pro怎么开启开发者选项? 如果你是360N7pro的用户,想要进行一些高级设置或者进行调试,就需要打开开发者选项。以下是具体步骤: 首先,进入360N7pro的“设置”页面,滑动下拉,找到“关于手机”选项。 在“关于手机”选项中,找到“版本号”或者“MIUI版本”(如果你的机型是MIUI系统),连续点击七次。 示例一:如果你的360N7…

    other 2023年6月26日
    00
  • Android 多渠道(友盟)打包教程分享

    Android 多渠道(友盟)打包教程分享 介绍 在Android开发中,多渠道打包是指将同一个应用程序打包成多个渠道包,每个渠道包可以在不同的应用市场或渠道上发布。友盟是一家提供移动统计、推送、分享等服务的第三方平台,它提供了方便的多渠道打包功能。 步骤 1. 集成友盟SDK 首先,你需要在你的Android项目中集成友盟SDK。你可以在友盟官网上找到最新…

    other 2023年8月3日
    00
合作推广
合作推广
分享本页
返回顶部