当前位置: 首页 > article >正文

php面向对象讲解

PHP是一种面向对象的编程语言,它允许开发者使用面向对象的编程技术来构建复杂的应用程序。下面是一些关于PHP面向对象编程的讲解:

类与对象

类是一种用于定义对象的蓝图,它描述了对象的属性和方法。对象则是类的一个实例,它具有类中定义的属性和方法。 在PHP中,使用class关键字来定义一个类,例如:

<?php
class Person {
    public $name;
    public $age;
    function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }
    function sayHello() {
        echo "Hello, my name is " . $this->name;
    }
}

上面的代码定义了一个名为Person的类,它有两个属性$name$age,和一个构造函数__construct(),以及一个方法sayHello()。 我们可以使用new关键字来创建一个类的实例,例如:

<?php
$person1 = new Person("John", 30);

上面的代码创建了一个Person类的实例$person1,并将其属性$name设为John,属性$age设为30。 我们可以使用箭头符号->来调用对象的属性和方法,例如:

<?php
echo $person1->name; // 输出 "John"
$person1->sayHello(); // 输出 "Hello, my name is John"

访问控制

PHP提供了三种访问控制关键字来限制类的属性和方法的访问权限,它们分别是publicprotectedprivate

  • public:公共的属性和方法可以被类的实例、类的子类和其他代码访问。
  • protected:受保护的属性和方法可以被类的实例和类的子类访问,但不能被其他代码访问。
  • private:私有的属性和方法只能被类的实例访问,不能被类的子类和其他代码访问。 例如:
    <?php
    class Person {
        public $name;
        protected $age;
        private $email;
        function __construct($name, $age, $email) {
            $this->name = $name;
            $this->age = $age;
            $this->email = $email;
        }
        public function sayHello() {
            echo "Hello, my name is " . $this->name;
        }
        protected function getAge() {
            return $this->age;
        }
        private function getEmail() {
            return $this->email;
        }
    }

    上面的代码定义了一个Person类,其中$name属性是公共的,$age属性是受保护的,$email属性是私有的。sayHello()方法是公共的,getAge()方法是受保护的,getEmail()方法是私有的。

    继承

    继承是面向对象编程的重要概念之一,它允许我们创建一个新的类,并从一个已有的类中继承属性和方法。继承可以减少代码的重复,增强代码的可维护性和可扩展性。 在PHP中,使用extends关键字来继承一个类,例如:

    <?php
    class Student extends Person {
        public $major;
        function __construct($name, $age, $email, $major) {
            parent::__construct($name, $age, $email);
            $this->major = $major;
        }
        public function sayHello() {
            echo "Hello, my name is " . $this->name . " and I'm a student.";
        }
    }

    上面的代码定义了一个Student类,它继承自Person类,并添加了一个$major属性。它还重写了sayHello()方法,以便在输出中添加学生的身份信息。 在子类的构造函数中,我们可以使用parent::__construct()来调用父类的构造函数,以便初始化继承的属性。

    多态

    多态是面向对象编程的另一个重要概念,它允许我们使用一个基类类型的变量来引用子类对象,从而实现代码的通用性和灵活性。 在PHP中,多态可以通过类型提示和抽象类来实现。 类型提示是一种语法,它允许我们在函数或方法的参数中指定参数的类型,从而限制参数的类型,并提高代码的可读性和可维护性。例如:

    <?php
    function sayHello(Person $person) {
        $person->sayHello();
    }

    上面的代码定义了一个sayHello()函数,它接受一个Person类型的参数。由于Student类继承自Person类,所以我们可以将一个Student类的实例作为参数传递给sayHello()函数。 抽象类是一种特殊的类,它不能被实例化,只能被用来继承。抽象类中可以定义抽象方法,这些方法没有具体的实现,只是用来规定子类必须实现的方法。例如:

    <?php
    abstract class Shape {
        abstract public function area();
    }
    class Rectangle extends Shape {
        private $width;
        private $height;
        function __construct($width, $height) {
            $this->width = $width;
            $this->height = $height;
        }
        public function area() {
            return $this->width * $this->height;
        }
    }

    上面的代码定义了一个抽象类Shape,它有一个抽象方法area()Rectangle类继承自Shape类,并实现了area()方法。 我们可以使用多态来实现一个通用的计算面积的函数,例如:

    <?php
    function getArea(Shape $shape) {
        return $shape->area();
    }
    $rectangle = new Rectangle(10, 20);
    echo getArea($rectangle); // 输出 "200"

    上面的代码定义了一个getArea()函数,它接受一个Shape类型的参数,并调用该参数的area()方法来计算面积。我们可以将一个Rectangle类的实例作为参数传递给getArea()函数。


http://www.kler.cn/a/6160.html

相关文章:

  • 如何查看服务器上的MySQL/Redis等系统服务状态和列表
  • C# 修改项目类型 应用程序程序改类库
  • 大数据组件(三)快速入门实时计算平台Dinky
  • THREE.js的VideoTexture以及CanvasTexture在部分浏览器以及小程序webview中纯黑不起作用的解决办法
  • SQL编程语言
  • 【C++】深入解析二维数组初始化与越界问题
  • 2023年全国最新保安员精选真题及答案42
  • 计算机网络中端到端与点到点的区别
  • 【创作赢红包】求最大公因数与最小公倍数
  • 【新2023Q2模拟题JAVA】华为OD机试 - 总最快检测效率 or 核酸检测效率
  • 【云原生进阶之容器】第五章容器运行时5.5--容器运行时之Kata Containers
  • 2023年南京晓庄学院五年一贯制专转本秘书学专业考试大纲
  • 让ChatGPT告诉你Java的发展前景
  • Java小课堂:自定义注解(案例:自定义DecimalFormat注解)
  • TiDB入门篇-数据物理备份和恢复
  • 损失函数:如何帮助模型学会“自省”?
  • 【Redis】数据结构 - HyperLogLog
  • 内存管理介绍
  • 3.docker-容器命令
  • Java标识符和关键字
  • 简单使用AndroidStudio 官方Profiler工具进行内存泄漏检查
  • [数据结构]冒泡排序、快速排序
  • 今天面了一个来京东要求月薪25K,明显感觉他背了很多面试题...
  • 浙江省高校计算机等级考试二级Python 程序设计题6——判断字符串长度|2023备考
  • python e指数函数,常用的e指数代码
  • Python 自动化指南(繁琐工作自动化)第二版:附录 A:安装第三方模块