面向对象【修饰符,析构,封装,静态等】

  对象,在php中,一切皆对象

  类,是众多对象抽象出来的,

  对象,是由类实例化出来的。

 。定义 类

 。class 类名

    {var $name 成员变量,用var定义,也可以用修饰符代替var定义

      var $age 成员变量

      function eat(){} 成员方法,描述类的方法

      function 类名(){} 构造函数,即使不写也会一直存在,PHP一般用 function __construct(){} 写(注,两个下划线),在造对象的时候执行,

     }

    。抽象的东西不能直接拿来使用,要先实例化

     实例化

     $r=new (类名); 先新建一个实例化的人

     $r->name="张三" 调用成员变量

     $r-> age=1 调用成员变量
     $r->eat() 调用成员方法

   。访问修饰符

     public 共用的 成员变量的var被public替换 成员变量前边加上public就可以变成公用的

     protected 受保护的 只能在该类或者该类的子类里边访问

     private 私有的 只能在该类访问。 成员变量一般都是私有的,成员方法一般都会公用的。

     在private的时候使用 $this->name 调用成员变量name this代表该对象即谁过来调用就是谁。

   。析构函数

     function __destruct(){ } 在对象函数销毁时执行,不能给代码,他也是一个自动调用函数

     函数重载 是一种编译多态,(php中没有,一般在强类型语言里面)
      public void Text(string s){echo “111”}

     定于关键词 返回值 名称 类型 输出的数据

      public void Text(string s){echo “111”}

      public void Text(int a){echo “int”}

      public void Text(string s,string a){echo “222”}

     即根据输入类型或者个数不一样,会调用Text()不同的功能

  。面向对象

    面向对象有三大特性,即封装,继承和多态。

    封装,为了让类更加安全

     class Ren

     {

          private $name;

          function setName($n)            设置name的值,可以加限制条件。

         { 

             $this->name=$n;           

          } 

          

            function setName()            获取name的值。

              { 

                return $this->name;           

               } 

     }

     封装要满足的条件,

      ,1 成员变量为私有,外界无法访问。

      ,2 做成员方法来间接访问。

      ,3 可以在该方法里加限制条件。

    。魔术方法     

        魔术方法写在类里面,会在执行时直接调用,用法没有变。

        class Ren

         {

             private $name;

             private $sex;

             function __set(变量名称,变量值)                赋值

             {

                  $this->变量名称=变量值;

              }

             function __get($n)                   取值

             {

                return $this->$n;

              }

         }

        。继承

          子类可以继承父类的一切,出来私有的,即加了private的。

          单继承,只能有一个父类,也可以对父类进行重写,即定义一个和父类一样的方法。

          parent ::方法名() 可以调用父类,,这样会先执行父类的然后再加上重写的。

           class Ren

           {

                  $name;

            }

            

             class China extends Ren   继承的关键词extends

            {        }

       。多态

         当父类引用指向子类实例的时候,由于子类对父类进行重写,该引用在调用方法的时候表现出的不同。

        子类可以代替父类。

       。静态

        普通成员   是属于对象的。

        静态成员   是属于类的   关键字 static

          class FenBi

          {

                   public $length;

                   public static $corlor;

                   public static function test()

                  {

                        echo "这是静态方法"

                   }

                   public function ceshi()

                  {

                       echo self::corlor                       调用静态成员的方法 self加双冒号,普通成员方法可以调用静态对象

                   }

             }

           $a=now FenBi;

           $s->length;     普通成员调用方式

           $FenBi :: $corlor      静态成员的调用方式

            FenBi::test()    不用造对象就可以直接调用静态成员方法,静态成员方法不能调用普通成员,因为普通成员属于对象,不属于类

           FenBi::test()   普通成员方法可以调用静态对象

         。抽象

           抽象的关键字 abstract  抽象类,因为太过抽象,不能被实例化,常被用作为父类存在

             abstract class DongWu

            {

                 public $name;

                 abstract public function test();       因为抽象类太过于抽象,抽象函数不能出现函数体。

             }

            class Dog

           {          }

           $d=new Dog ;

           var_dump($d);        不可以读取,因为子类在在继承父类方法时,要重新写抽象方法

           1,因为抽象类太过于抽象,抽象函数不能出现函数体。

           2,子类在在继承父类方法时,要重新写抽象方法

           3,包含抽象方法的类一定是抽象类

        。接口

          接口,极度抽象的类 关键词 interface

            interface IUSB

            {

                 public function read();

                 public function write();

             } 

            class ShuBiao implements IUSB       implements 相当于继承,在接口处称为实现

            {

                  public function read( “可读”);

                  public function write("可写");

            }

            总结:1,接口里面没有成员变量。

                     2,接口里的函数全部是抽象函数,没有函数体

                     3, 接口里默认函数为抽象函数,不用写关键字 static

           。__tostring

             class Ren

             {

                   public $name;

                   public function __tostring()

                   { return "这里是人类里面的名字选项"} 

              } 

             $r=new Ren;

              echo $r;         在这里用echo会报错,因为加了__tostring 就可以直接输出

           。克隆

              class Ren  

             {

                  public $name="张三";

                  public function __clone()

                  {

                        $this->name=" 李四" ;   改变克隆的值。

                   }

             }

            $r=new Ren();

            $c=clone $r;    c克隆r, 完全克隆,但是改变c的值不会影响r的值。

          。加载类

            1,in clude(“地址”)   在相同目录下 ./class文件名.class.php 

            2,in clude 空格“地址”  

            3,require(“地址”)

            4,require空格“地址”

            5,require_once("地址")

            6,require_once空格“地址”

         。自动加载类

            function __autoload($classname)

           {

                 require_once "./".$classname."class.php"

            }

          注意:1,所有类文件写在同一个目录下

                   2,类文件命名要一致

                   3,类的文件名要和文件名一致

原文地址:https://www.cnblogs.com/cyd123/p/6739661.html