zoukankan      html  css  js  c++  java
  • PHP中oop面向对象基础知识(一)

                                                                                        OOP 基础知识汇总(一)

    >>>你需要了解以下概念
    面向对象&面向过程概念:

        面向过程:专注于解决一个问题的过程。面向过程的最大特点,是由一个一个的函数去解决处理这个问题的一系列过程。
        面向对象:专注于由哪个对象来处理一个问题。面向对象的最大特点,是有一个个具有属性和功能的类,从类中拿到对象,进而处理问题。


    【面向对象】

     1、什么是类?
         具有相同属性(特征)和方法(行为)的一系列个体的集合,类是一个抽象的概念
     2、什么是对象?
         从类中,拿到的具有具体属性值的个体,称为对象。对象是一个具体的个体。
         例如:人类,都有姓名、性别、年龄,但是这些属性都不能有具体的值。
                  张三,是人类中的一个对象!姓名张三、性别男、年龄23,将类的每一个属性具体赋值后,就成了张三这个对象。

     3、类和对象的关系?
        类是对象的抽象化!对象是类的具体化!
      类仅仅表明这类对象有哪些属性,但是不能有具体的值,所以类是抽象的。
      而对象,是将类的所有属性赋值后,产生的具体的个体,所有对象是具体的。

    类的声明与实例化:  

    1、如何声明一个类:

         class 类名{

                 访问修饰符 $属性[=默认值];
                 [访问修饰符] function 方法(){}
          }
         
    2、声明一个类的注意事项:
      ① 类名只能有字母数字下划线组成、开头不能是数字,必须符合大驼峰法则;
      ② 类名必须使用class修饰,类名后面一定不能有();
      ③ 属性必须要带访问修饰符,方法可以不带访问修饰符;

    3、实例化对象及对象属性方法的调用?
       $对象名 = new 类名(); //()可以不带

    类外部调用属性和方法
       $对象名 -> 属性名; // 使用->调用属性时,属性名不能带$
    类内部调用属性和方法
      $this -> 属性名;

    构造函数:
    1、什么是构造函数?
       构造函数是类中的一个特殊函数,当我们使用new关键字实例化对象时,相当于调用了类的构造函数;
    2、构造函数有什么作用?
         实例化对象时,自动调用,用于给对象的属性赋初值!
    3、构造函数的写法?
        ① 构造函数名,必须与类同名
        [public] function Person($name){
            $this -> name = $name;
        }
        ② 使用魔术方法__construct
            [public] function __construct($name=""){
            $this -> name = $name;
        }

     4、构造函数注意事项:

       ① 第一种写法,构造函数名必须与类同名!!!!!!
       ② 如果一个类没有手写构造函数,则系统默认会有一个空参构造,因此可以使用new Person();
           如果我们写了带参数的构造函数,则将不会再有空参构造,也就是不能直接使用new Person(); Person后面的()中的参数列表,必须符合构造函数的要求!!!
       ③ 如果两种构造函数同时存在,将使用__construct。


     5、析构函数:__destruct():
         ① 析构函数在对象被销毁释放之前自动调用!
         ② 析构函数不能带有任何的参数
         ③ 析构函数常用于对象使用完以后,释放资源、关闭资源等!

    6、魔术方法:
         PHP中,给我们提供一系列用__开头的函数,这些函数无需自己手动调用,会在合适的时机自动调用,这类函数称为魔术函数。
        例如:function __construct(){} 在类new一个对象时自动调用
        function __destruct(){} 在对象被销毁时自动调用
       我们要求,除了魔术方法之外,自定义的函数与方法不能使用__开头。


        最后,一般对于功能比较复杂的类,我们会单独的写到一个类文件中。
        类文件的命名,统一小写,使用“类名小写.class.php”的方式命名。
        在其他文件中使用这个类时,可以用include导入这个.class.php文件

    封装的基本概念

     1、什么是封装?
    通过访问修饰符,将类中不需要外部访问的属性和方法进行私有化处理,以实现访问控制。
     注意:是实现访问控制,而不是拒绝访问。 也就是说,我们私有化属性之后,需要提供对应的方法,让用户通过我们提供的方法处理属性。

     2、封装的作用?
       ① 使用者只关心类能够提供的功能,而不必关心功能实现的细节!(封装方法)
       ② 对用户的数据进行控制,防止设置不合法数据,控制返回给用户的数据(属性封装+set/get方法)
     3、实现封装操作?
       ① 方法的封装
         对于一些只在类内部使用的方法,而不像对外部提供使用。那么,这样的方法我们可以使用private进行私有化处理。
        private function formatName(){} //这个方法仅仅能在类内部使用$this调用
        function showName(){
          $this -> formatName();
              }

    ② 属性的封装+set/get方法  为了控制属性的设置以及读取,可以将属性进行私有化处理,并要求用户通过我们提供的set/get方法进行设置

     private $age;
       function setAge($age){
           $this->age = $age;
       }
       function getAge(){
           return $this->age;
       }
     $对象 -> getAge();
     $对象 -> setAge(12);

    ③ 属性的封装+魔术方法
       private $age;
       function __get($key){
           return $this->$key;
       }
     function __set($key,$value){
          $this->$key=$value;
    }
     $对象->age; // 访问对象私有属性时,自动调用__get()魔术方法,并且将访问的属性名传给__get()方法;
     $对象->age=12; // 设置对象私有属性时,自动调用__set()魔术方法,并且将设置的属性名以及属性值传给__set()方法;

     注意:在魔术方法中,可以使用分支结构,判断$key的不同,进行不同操作。

    4、关于封装的魔术方法:
     ① __set($key,$value):给类私有属性赋值时自动调用,调用时给方法传递两个参数:需要设置的属性名、属性值;
     ② __get($key):读取类私有属性时自动调用,调用时给方法传递一个参数:需要读取的属性名;
     ③ __isset($key):外部使用isset()函数检测私有属性时,自动调用。
       >>> 类外部使用isset();检测私有属性,默认是检测不到的。false
       >>> 所以,我们可以使用__isset();函数,在自动调用时,返回内部检测结果。
       function __isset($key){
          return isset($this->$key);
       }
     当外部使用isset($对象名->私有属性);检测时,将自动调用上述__isset()返回的结果!
     ④ __unset($key):外部使用unset()函数删除私有属性时,自动调用;
       function __unset($key){
       unset($this->$key);
        }
     当外部使用unset($对象名->私有属性);删除属性时,自动将属性名传给__unset(),并交由这个魔术方法处理。

    未完待续   》》》》》》

      

  • 相关阅读:
    ScriptManager在客户端来调用服务器端方法或者webService的方法
    转2010 .NET面试题整理之基础篇
    .net 面试题1
    读写文件
    三种编解码方式
    vs2008快捷键
    SharePoint类库说明.NET教程,Asp.Net研发
    一道sql面试题解法
    16天学完java
    总结DataTable 导出Excel数据
  • 原文地址:https://www.cnblogs.com/GlenLi/p/6986934.html
Copyright © 2011-2022 走看看