资讯专栏INFORMATION COLUMN

【PHP】面向对象编程

KaltZK / 1486人阅读

摘要:封装是面向对象的特征之一,是对象和类概念的主要特性。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。构造函数通常被用来自动执行很多初始化操作。

之前的相关问题

面向对象和面向过程的差别,各自的优缺点

面向对象有哪些基本特性?各自特性带来哪些好处

面向对象的基本语法?

面向对象的基本特性的基本实现

面向对象结合各种设计模式的使用

面向对象的优势

易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护

面向对象的三大特性

封装:也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

继承:是可以让某个类型的对象获得另一个类型的对象的属性的方法。它支持按级分类的概念。在 OOP中,继承的概念很好的支持了代码的重用性(reusability),也就是说,我们可以向一个已经存在的类中添加新的特性,而不必改变这个类。这可以通过从这个已存在的类派生一个新类来实现。这个新的类将具有原来那个类的特性,以及新的特性。而继承机制的魅力和强大就在于它允许程序员利用已经存在的类(接近需要,而不是完全符合需要的类),并且可以以某种方式修改这个类,而不会影响其它的东西

多态:多态就是指一个类实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用

PHP面向对象的基本语法

声明一个类:
使用一个class关键字,提供一个类的名字,然后列出这个累的实例应该具备的方法和属性

class MyClass{
    ...    //属性列表
    
    ...    //方法列表
}

new关键字和构造函数
类的实例使用new关键字创建。

$zhangsan = new Person();

上面的代码创建了Person类的实例,当调用new的时候PHP会分配一个新的对象,并且从你定义的类中拷贝属性和方法,然后如果你定义了对象的构造函数的话,它会被自动调用,它在new关键字创建一个对象后自动裕兴。构造函数通常被用来自动执行很多初始化操作。构造函数也接收参数


使用$this变量访问方法和属性
在对象的方法执行时,PHP会自动定义一个叫$this的特殊变量,他表示一个对对象本身的引用

$this->name;     //访问$name非静态属性(注意别在属性的名字前面加$符号)
$this->getName();    //调用类的非静态方法

public,protected和private属性和方法


静态属性
静态属性和常规属性不一样,静态属性属于类本身而不属于类的任何势力。静态属性使用static关键字定义。
访问一个静态属性:使用类名或者使用特殊的类名self来访问它,self是一个方法所属的类的缩写。

print MyClass::$staticName;
print self::$staticName;    //在类的方法中调用

静态方法
静态方法是类的一部分,不属于类的任何实例。静态方法中不能使用任何$this,因为静态方法跟实例无关。

class_name::method();
self::method();

类的常量
与静态成员相似,它们属于类本身而不属于类的实例。类的常量对大小写敏感。

class MyClass{
    const RED = "red";
    
    function color(){
        return self::RED;
    }
}
print MyClass::RED;
$obj = new MyClass();
$obj->color();

多态

    class Cat{
        public function miau(){
            print "miau";
        }
    }

    class Dog{
        public function waff(){
            print "waau";
        }
    }

    function makeSound($obj){
        if($obj instanceof Cat){
            $obj->miau();
        }else if($obj instanceof Dog){
            $obj->waff();
        }else{
            print "Error:Pass wrong kind of object!";
        }
        print "
";
    }

    makeSound(new Cat());
    makeSound(new Dog());

上面的例子是不可以扩展的,想增加第三个动物声音时,不得不在makeSound()函数中增加esleif语句。可以使用多态解决这个问题

    class Animal{
        public function makeSound(){
            print "Error:should implemented class";
        }
    }

    class Cat extends Animal{
        public function makeSound(){
            print "miau";
        }
    }

    class Dog extends Animal{
        public function makeSound(){
            print "waau";
        }
    }

    function makeSound($obj){
        if($obj instanceof Animal){
            $obj->makeSound();
        }else{
            print "Error:Pass wrong kind of object!";
        }
        print "
";
    }

    makeSound(new Cat());
    makeSound(new Dog());

抽象类 abstract
如果类中定义了抽象方法,那么这个类必须定义为抽象类,抽象类中的抽象函数没有被实现,所以不是一个完整的类,所以不能实例化抽象类的。
如果一个类继承了抽象类,那么这个类必须实现抽象类的抽象方法


接口 interface

interface Loggable{
    function logString();
    
    function logErr();
}

接口中的方法都是abstract的,就是说其中的方法都没有实现

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/30608.html

相关文章

  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    AaronYuan 评论0 收藏0
  • 浅谈PHP面向对象编程

    摘要:一面向对象编程基础实践通过对象的编程方式,可将实现生活中的一切事物以对象的形式表现出来。此时程序也将会报致命错误。属性不可访问或未定义,值判断对象中的属性不存在时,自动执行该函数。属性值未定义释放对象中的不存在的属性值时,自动执行该函数。 一、PHP面向对象编程基础实践 二、PHP面向对象高级编程实践 知识点:类的继承、方法重写、访问控制、static关键字、final关键字、数据访...

    DrizzleX 评论0 收藏0
  • PHP面向对象编程面向对象概念、基本实践、高级实战、PHP面向对象特殊实践

    摘要:一面向对象的概念什么是面向对象世间万物皆对象,抽象的也是对象,一切可见或不可见都是对象对象的基本组成对象包含两个部分对象的组成元素是对象的数据模型,用于描述对象的数据又称为对象的属性,或者对象的成员变量对象的行为是对象的行为模型,用于描述对 一、面向对象的概念 1.1 什么是面向对象(object oriented)      世间万物皆对象,抽象的也是对象,一切可见或不可见都是对象 ...

    worldligang 评论0 收藏0
  • php学习笔记(二)面向对象编程

    摘要:具有构造函数的类会在每次创建新对象时先调用此方法,所以非常适合在使用对象之前做一些初始化工作。类的定义以关键字开始,类的命名通常以每个单词第一个字母大写定义属性构造函数,在对象被实例化的时候自动调用是里面的伪变量,表示对象自身。 public 公有的:本类,子类,外部对象都可以调用 protected 受保护的:本类 子类,可以执行,外部对象不可以调用 private 私有的:只能...

    alanoddsoff 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<