面向对象

Posted 莫欺_少年穷

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象相关的知识,希望对你有一定的参考价值。

  1、概念:面向对象就是将要处理的问题抽象为对象,然后通过对象的属性和行为来解决对象的实际问题;

  2、特点

      ①封装性:将一个类的使用和实现分开,只保留有限的接口(方法)与外部联系。对于使用该类的开发人员只需关注怎么去使用该类,而不用关注其实现的细节。这样做可以让开发人员将精力集中起来专注别的事情,同时避免了程序之间相互依赖而带来的不便;

      类的封装通过关键字public、private、protected、static、和final实现的;

        public:公共成员关键字,可以再程序的任何地方被其他类和对象调用。子类可以继承和使用父类中所有的公共成员

        private:私有成员关键字,只能在本类的内部被调用和修改。子类和类外部都不可访问

        protected:保护成员关键字,可以在本类和子类中被调用,其他地方则不可以被调用

        static:静态成员关键字,该关键字修饰的属性和方法不需要对象,使用   类名::$静态属性名/静态方法名(参数1,...)  就可以直接访问。

      ②继承性:子类自动继承父类中的属性和方法,并可以重写或添加新的属性和方法。继承简化了对象和类的创建,增加了代码的可重用性;

      ③多态性:同一个类的不同对象,使用同一个方法可以获得不同的结果。多态性增加了软件的灵活性和重用性。

  3、对象是类进行实例化后的产物;

  4、$this 操作符:表示对对象本身的引用

  5、“::”操作符:可以在没有任何实例的情况下访问类中的成员

        —— 语法格式:  关键字::变量名/常量名/方法名

           — 关键分类:①parent关键可以调用父类中的成员变量成员方法和常量;

                 ②self关键字:可以调用当前类中的静态成员和常量;

                 ③类名:可以调用本类中的变量、常量和方法

  6、构造方法: _ _construct()

      对象创建完成后第一个被对象自动调用的方法。

  7、不能被实例化的特殊的类:抽象类

      使用:只能作为其他类的父类使用。class 子类 extends 父类{   }

      语法格式:

abstract class 抽象类名称{
       //抽象类的成员变量列表  
       abstract function 成员方法1(参数);
       abstract function 成员方法1(参数);
}

 

      注意:抽象类至少要包含一个抽象方法;抽象类没有方法体,其功能只能在其子类中实现;

      应用场景:抽象类和抽象方法主要应用于复杂的层次关系中,这种层次关系要求每一个子类都包含并重写某些特定的方法

  8、不能被实例化的特殊的类:接口

     使用:接口与抽象类相同,不能进行实例化的操作,需要通过子类来实现。但是接口可以直接使用接口名称在接口外获取常量成员的值。class 子类 implements 接口类1,接口类2{  }

     语法格式:

interface 接口名称{
        const  常量名;                    //接口中成员只能是常量publicfunction 方法名();     //成员方法必须是抽象方法
}

 

   9、面向对象常用的魔术方法:_ _call()、_ _toString()、_ _autoload()

        ①_ _call(): 当程序试图调用不存在或不可见的成员方法时,php会先调用_ _call()方法来存储方法名和参数。

            使用格式:

 public function _ _call($method,$parameter){
             echo ‘如果方法不存在,则执行该方法<br>‘;
             echo ‘方法名为:‘.$method.‘<br>‘;         //输出第一个参数,该类不存在的方法名      
             echo ‘参数有:‘;
             var_dump($parameter);                   //输出第二个参数,不存在的方法中传入的参数              
 }    

 

      ②_ _toString():当时用echo和print输出对象时,将对象转化为字符串。

         使用格式:

class Person{
      public function _ _toString(){
           return "我是toString的方法体";  
      }      
}
$per = new Person();
echo $per;          //输出  “我是toString的方法体”

 

       ③_ _autoload():自动实例化需要使用的类。

 

 

 

 

 

 

 

 

 

 

 

      

以上是关于面向对象的主要内容,如果未能解决你的问题,请参考以下文章

面向面试编程代码片段之GC

PHP面向对象之选择工厂和更新工厂

Java中面向对象的三大特性之封装

python之路之前没搞明白4面向对象(封装)

Scala的面向对象与函数编程

Python面向对象学习之八,装饰器