美文网首页
PHP面向对象(一)

PHP面向对象(一)

作者: PHPer_ | 来源:发表于2017-07-10 18:16 被阅读146次

    1.什么是面向对象?

    面向对象编程(Object Oriented Programming, OOP, 面向对象程序设计)是一种计算机编程架构,OOP的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成,OOP达到了软件工程的三 个目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息。面向对象一直是软件开发领域内比较热门的话 题,首先,面向对象符合人类看待事物的一般规律。其次,采用面向对象方法可以使系统各部分各司其职、各尽所能。为编程人员敞开了一扇大门,使其编程的代码 更简洁、更易于维护,并且具有更强的可重用性。有人说PHP不是一个真正的面向对象的语言,这是事实。PHP 是一个混合型语言,你可以使用OOP,也可以使用传统的过程化编程。然而,对于大型项目,你可能需要在PHP 中使用纯的OOP去声明类,而且在你的项目里只用对象和类。

    2.什么是类,什么是对象,类和对象之间的关系

    类的概念:类是具有相同属性和服务的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和服务两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和服务说明两个主要部分。
    对象的概念:对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位。一个对象由一组属性和对这组属性进行操作的一组服务组成。从更抽象 的角度来说,对象是问题域或实现域中某些事物的一个抽象,它反映该事物在系统中需要保存的信息和发挥的作用;它是一组属性和有权对这些属性进行操作的一组 服务的封装体。客观世界是由对象和对象之间的联系组成的。
    类与对象的关系就如模具和铸件的关系,类的实例化结果就是对象,而对一类对象的抽象就是类.类描述了一组有相同特性(属性)和相同行为(方法)的对象。 不要被概念的东西搞晕了

    举个例子:

    如果你去中关村想买几台组装的PC机,到了那里你第一步要干什么, 是不是装机的工程师和你坐在一起,按你提供的信息和你一起完成一个装机的配置单呀, 这个配置单就可以想像成是类,它就是一张纸,但是它上面记录了你要买的PC机的信息,如果用这个配置单买10台机器,那么这10台机子,都是按这个配置单 组成的,所以说这10台机子是一个类型的,也可以说是一类的。那么什么是对象呢,类的实例化结果就是对象, 用这个配置单配置出来(实例化出来)的机子就是对象, 是我们可以操作的实体, 10台机子, 10个对象。 每台机子都是独立的,只能说明他们是同一类的,对其中一个机做任何动作都不会影响其它9台机器,但是我对类修改, 也就是在这个配置单上加一个或少一个配件, 那么装出来的9个机子都改变了, 这是类和对象的关系(类的实例化结果就是对象)

    3.如何抽象出一个类?

    类是对象的抽象组织,对象是类的具体存在。所以要定义规范、合理的类结构首先应该明确类应该具有的属性和方法,在初学阶段可以将类理解为属性+方法的集合体,一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。
    只要掌握基本的程序语法定义规则就可以做的出来,那么难点在那里呢? 一个项目要用到多少个类,用多少个对象, 在哪要定义类,定义一个什么样的类,这个类实例化出多少个对象, 类里面有多少个属性, 有多少个方法等等,这就需要大家通过在实际的开发中就实际问题分析设计和总结了。 类的定义:

    calss 类名 {
    }
    

    使用一个关键字class和后面加上一个你想要的类名以及加上一对大括号, 这样一个类的结构就定义出来了,只要在里面写代码就可以了。
    属性:
    通过在类定义中使用关键字" var "来声明变量,即创建了类的属性,虽然在声明成员属性的时候可以给定初值, 但是在声明类的时候给成员属性初始值是没有必要的,我们在实例出对象后给成员属性初始值就可以了。
    方法:
    通过在类定义中声明函数,即创建了类的方法。
    举个例子:

    class Person {
        // 下面是人的成员属性
        var $name; // 人的名字
        var $sex; // 人的性别
        var $age; // 人的年龄
     
        // 下面是人的成员方法
        function say() { // 这个人可以说话的方法
            echo "这个人在说话";
        }
     
        function run() { //这个人可以走路的方法
            echo "这个人在走路";
        }
    }
    

    4.如何实例化对象?

    我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类会声明了,下一步就是实例化对象了。
    当定义好类后,我们使用new关键字来生成一个对象。

    class Person {
        // 下面是人的成员属性
        var $name; // 人的名字
        var $sex; // 人的性别
        var $age; // 人的年龄
     
        // 下面是人的成员方法
        function say() { // 这个人可以说话的方法
            echo "这个人在说话";
        }
     
        function run() { //这个人可以走路的方法
            echo "这个人在走路";
        }
    }
     
    $p1 = new Person();
    $p2 = new Person();
    $p3 = new Person();
    

    $p1就是我们实例出来的对象名称, 同理,$p2, $p3也是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的,上面的代码相当于实例出来3个人来, 每个人之间是没有联系的, 只能说明他们都是人类, 每个人都有自己的姓名, 性别和年龄的属性,每个人都有说话和走路的方法,只要是类里面体现出来的成员属性和成员方法,实例化出来的对象里面就包含了这些属性和方法。
    对像在PHP里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的,在运行的时候都要加载到内存中去用, 那么对象在内存里面是怎么体现的呢?内存从罗辑上说大体上是分为4段, 栈空间段, 堆空间段,代码段, 初使化静态段, 程序里面不同的声明放在不同的内存段里面,栈空间段是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1, 10, 100, 1000, 10000, 100000等等,在内存里面占用空间是等长的,都是64位4个字节。 那么数据长度不定长,而且占有空间很大的数据类型的数据放在那内存的那个段里面呢?这样的数据是放在堆内存里面的。栈内存是可以直接存取的,而堆内存是不 可以直接存取的内存。对于我们的对象来说就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通 过对象名称就可以使用对象了。

    5.如何使用对象中的成员

    访问对象中的成员就要使用一个特殊的操作符”->”来完成对象成员的访问:

    class Person {
        // 下面是人的成员属性
        var $name;      // 人的名子
        var $sex;       // 人的性别
        var $age;       // 人的年龄
     
        // 下面是人的成员方法
        function say() { // 这个人可以说话的方法
            echo "这个人在说话";
        }
     
        function run() { // 这个人可以走路的方法
            echo "这个人在走路";
        }
    }
     
    $p1 = new Person(); // 创建实例对象$p1
    $p2 = new Person(); // 创建实例对象$p2
    $p3 = new Person(); // 创建实例对象$p3
     
    // 下面三行是给$p1对象属性赋值
    $p1->name = "张三";
    $p1->sex = "男";
    $p1->age = 20;
     
    // 下面三行是访问$p1对象的属性
    echo "p1对象的名子是:" . $p1->name;
    echo "p1对象的性别是:" . $p1->sex;
    echo "p1对象的年龄是:" . $p1->age;
     
    // 下面两行访问$p1对象中的方法
    $p1->say();
    $p1->run();
     
    // 下面三行是给$p2对象属性赋值
    $p2->name = "李四";
    $p2->sex = "女";
    $p2->age = 30;
     
    // 下面三行是访问$p2对象的属性
    echo "p2对象的名子是:" . $p2->name;
    echo "p2对象的性别是:" . $p2->sex;
    echo "p2对象的年龄是:" . $p2->age;
     
    // 下面两行访问$p2对象中的方法
    $p2->say();
    $p2->run();
     
    // 下面三行是给$p3对象属性赋值
    $p3->name="王五";
    $p3->sex="男";
    $p3->age=40;
     
    // 下面三行是访问$p3对象的属性
    echo "p3对象的名子是:" . $p3->name;
    echo "p3对象的性别是:" . $p3->sex;
    echo "p3对象的年龄是:" . $p3->age;
     
    // 下面两行访问$p3对象中的方法
    $p3->say();
    $p3->run();
    

    从上例中可以看出只是对象里面的成员就要使用对象->属性 、对象->方法 形式访问。

    相关文章

      网友评论

          本文标题:PHP面向对象(一)

          本文链接:https://www.haomeiwen.com/subject/lkjuhxtx.html