php面向对象编程

210 阅读2分钟

一、面向对象介绍

1.1 介绍

面向对象是一个编程思想,编程思想有面向过程和面向对象。 面向过程:编程思路集中的是过程上。 面向对象:编程的思路集中在参与的对象。

1.2 面向对象的好处

  1. 多人合作方便
  2. 减少代码冗余,灵活性高
  3. 代码的可重用性发挥到极致
  4. 可扩展性强

1.3 类和对象

  1. 对象是具体存在的事务,对象是由属性(变量)和方法(函数)组成的

  2. 类是具有相同属性和行为的一组对象的集合

二、 在php中实现类和对象

2.1 创建类

语法:

class 类名 {
	// 属性
	// 方法
	// 常量
}

类是由属性、方法、常量组成的,也可以说类成员有:属性、方法、常量。

类名的命名规则:

  1. 以字母、下划线开头,后面跟的是字母、数字、下划线。
  2. 不能用PHP关键字做类名
  3. 类名不区分大小写(变量名区分,关键字、类名不区分大小写)
  4. 类名用帕斯卡命名法(大驼峰 单词的首字母大写)

2.2 实例化对象

创建完类后,通过new 类名()进行实例化 例:

<?php
    // 定义类
    class Student {

    }

    // 实例化对象
    $stu1=new Student();
    $stu2=new Student();
    $stu3=$stu2; // 对象传递默认是传递地址
    // 对象比较
    var_dump($stu1,$stu2,$stu3);
    var_dump($stu1==$stu2); // bool(true) 比较对象结构

    var_dump($stu1===$stu2); // bool(false) 是否为同个对象

    var_dump($stu2===$stu3); // bool(true) 为同个对象
    
?>

效果: 在这里插入图片描述 对象的比较: 相等:结构和保存的值一样就相等 全等:指向同一个对象才是全等

2.3 类添加属性和方法

属性本质就是变量 通过 ->调用对象的成员
对象名->属性名 对象名 -> 方法名()

  1. 属性

    代码:

<?php
    // 定义类
    class Student {
        public $name;  // 姓名属性
        public $add='地址不详'; // 地址属性,默认值为地址不详 
    }

    // 实例化对象
    $stu=new Student();

    // 给属性赋值
    $stu->name='Jack';
    $stu->add='厦门';
    
    // 获取属性的值
    echo '姓名:'.$stu->name,'<br/>';
    echo '地址:'.$stu->add,'<br/>';

    // 添加属性
    $stu->age=20; // 只给对象加了这个属性,而不是类。
    print_r($stu);
    echo '<br/>';

    // 删除属性
    unset($stu->add);
    print_r($stu);
    
?>

效果: 在这里插入图片描述 2. 方法 代码:

<?php
    // 定义类
    class Student {
        // 定义方法
        public function show() {
            echo '这是show方法<br/>';
        }
        // public可以省略,如果省略,默认就是public
        function test() {
            echo '这是test方法';
        }
    }
    $stu=new Student();
    $stu->show();
    $stu->test();
?>

效果: 在这里插入图片描述 小结: 1、方法前面public是可以省略,如果省略,默认就是public的。 2、属性前面的public不能省略。

三、访问修饰符

访问修饰符用来控制成员的访问权限

修饰符描述
public (公有的)在类的内部和外部都能访问
private(私有的)只能在类的内部访问
protected(受保护的)

测试:

<?php
    class Student {
        public $name='tom';
        private $add='Amoy';
    }
    $stu=new Student();

    echo $stu->name;
    echo $stu->add;
?>

效果: 在这里插入图片描述 属性一般都是私有的,但是可以通过公有的方法对私有的属性进行复制和取值。 作用:保证数据的合法性。 代码:

<?php
    // 访问修饰符
    class Student {
        private $name; // 属性一般是私有的
        private $add;
        
        // 通过公有的方法对私有的属性进行赋值
        public function setIn($name, $add) {
            $this->name=$name; // $this表示当前对象
            $this->add=$add;
        }

        // 取值
        public function getIn() {
            echo '姓名:'.$this->name,'<br/>';
            echo '地址:'.$this->add,'<br/>';
        }
    }
    $stu=new Student();

    $stu->setIn('Jack', 'Amoy');
    $stu->getIn()

?>

效果: 在这里插入图片描述 这样一来不是变的很繁琐,直接将属性设置为公有多省事,其实不然,设为私有的可以进行相对应的拦截,例如: 地址不是Amoy,就显示地址必须要是Amoy:

<?php
    // 访问修饰符
    class Student {
        private $name; // 属性一般是私有的
        private $add;
        
        // 通过公有的方法对私有的属性进行赋值
        public function setIn($name, $add) {
            if ($add!='Amoy') {
                echo '地址必须是Amoy!';
                exit;
            }
            $this->name=$name; // $this表示当前对象
            $this->add=$add;
        }

        // 取值
        public function getIn() {
            echo '姓名:'.$this->name,'<br/>';
            echo '地址:'.$this->add,'<br/>';
        }
    }
    $stu=new Student();

    $stu->setIn('Jack', 'Amoy1');
    $stu->getIn()

?>

效果: 在这里插入图片描述 那么就可以用来做过滤数据用。

四、类和对象在内存中的分布

  1. 对象的本质是一个复杂的变量
  2. 类的本质是一个自定义的复杂数据类型
  3. 栈区:运行速度快,体积小,保存基本类型
  4. 堆区:运行速度稍慢,体积大。保存复杂类型
  5. 实例化的过程就是分配内存空间的过程
  6. 对象保存在堆区,将堆区的地址保存到栈区。

在学习的php的路上,如果你觉得本文对你有所帮助的话,那就请关注点赞评论三连吧,谢谢,你的肯定是我写博的另一个支持。