php面向對象和js

php 面向對象

 

  js面向對象:

       類:具備相同特徵的一些對象的集合;php

    對象:具體某一個事物了,均可以叫對象;html

    類:經過function定義的類,因此js裏類的本質爲函數;函數

    類的標誌:首字母大寫(函數名 )  函數內部使用this  調用函數使用new關鍵字;post

    1.類和函數天生有prototype和__proto__兩個屬性,prototype又是一個對象,天生有一個constructor的屬性,屬性值函數或類自己;this

    2.普通對象:天生有一個__proto__的屬性,這個屬性又是一個對象,指向他的父類;url

    引用關係:prototype

    fn.prototype.init=function(){}翻譯

    fn.prototype={ init:function(){} }htm

    他們的區別?對象

      前者不會改變原有引用關係,後者會改變原有的引用關係;

      注意:每一個變量只能有一個地址

      拷貝:淺拷貝,深拷貝;

 php的面向對象

  類的建立:class建立;

    class Person{}

  對象的建立:使用new關鍵字:

    $p:new Person();       (若是裏面沒有參數,能夠不加括號);

  成員的添加:須要3個修飾符:public  protected  private

  public:定義公共的屬性,任何地方均可以使用,類的外部,類的內部,子類(公共)

  protected:定義受保護的屬性和方法,只能在類的內部和子類使用(受保護)

  private:定義私有的屬性和方法,只能在自身的類使用(私有)

  案例:

    public $word="hello world";   (解析:定義公共的變量word)

  方法成員的前面若是不加修飾符,默認爲public;

  成員的調用: 須要使用->符號;

    $p->fn()    (使用成員的屬性和方法的時候,屬性和方法前面不帶$符)

 特殊對象:$this 指向實例化的對象;

  案例:

  class person{

    public $name="lisi";        //(php每一個語句後面必定要加;)

    function fn(){

      echo $this->name;    //經過->調用屬性和方法;

    }

  $s=new Person;

  $s->fn();

  }

  若是類的方法裏想用類的其餘屬性和方法,須要使用$this對象;

  構造方法:__construct()  構造函數在實例化的時候,系統會自動調用;

  析構的方法:__destruct()  咱們每次new實例化,系統都會給這個對象分一個內存空間,若是不銷燬,系統的壓力很大,因此係統有一個析構的方法__destruct()  實例化以後,系統會自動調用;

  內存銷燬的原則:先進後出;

  案例:構造和析構聯合使用

  class Person{

    public $name;

    //構造的方法;

    function __construct($par){

      $this->name=$par

    }

    //析構的方法;

    function __destruct(){

      echo $this->name;

    }

  }

  $p=new Person("zhang");

  最後輸出zhang  翻譯爲 函數傳參使$name="zhang";  使用完畢後,會銷燬內存;  析構會直接輸出   無需調用;

  成員的賦值

  $p->name=456;

  echo $p->name;  單獨賦值的方法;

  注意:對象中的方法不會展開var_dump() 不能用這個展開對象;

  繼承的關鍵字:extends  

  class Child extends Person{}

  $c=new Child;

  var_dump($c)  這樣繼承全部屬性  可是方法卻看不見 

  範圍的修飾符  ::

  常量的使用const的關鍵字定義常量,常量定義和使用時不能帶$符

  注意:使用的時候不能用$this ,範圍修飾符:: 前面仍是這個類名,self關鍵字指向當前類名,parent關鍵字指向父類的類名;

  若是子類向訪問父類的常量使用parent;

  案例:

    //父類

    class Person{

      cont age="23",

    }

    //子類

    class Child extends Person{

      const name="zhang";

      function fn(){

        echo self::age;                   //指向當前類名

        echo parent::name;    //指向父類

      }

    }

    $p=new Child;

    $p->fn();

  靜態變量:在變量的前面加上關鍵字static,靜態的屬性不能使用->訪問,只能使用  類名::$變量名;

  案例:

    class Perosn{

      static $name="zhang";

    }

    echo Person::$name;

  12.重載。覆蓋;final關鍵字的使用

   子類繼承父類的方法時,若是子類有和父類同名的方法從父類繼承的方法就會被覆蓋掉,這就是重載;

   但若是父類的方法前面加上final則子類沒法重載父類的方法,就會報錯

   案例:

   //父類:

   class Person{

      final function fn(){

        echo "個人孩子,不能起個人名字,不然會報錯"

      }

   }

  class Child extends Person{

    function fn(){

      echo "我不能用我爸的名字  我要報錯"

    }

  }

  $p=new Child;

  $p->fn;

  子類想使用父類的構造函數,只能使用  parent::__construct()  使用的時侯直接調用了;

  案例:

  //父類

  class Person{

    public $name="zhang";

    function __construct(){

      echo $this->name;

    }

  }

  //子類

  class Child extends Person{

    function __construct(){

      parent::__construct();

    }

  }

  $p=new Child;

  public  protected  private 的區別?

  案例:瞭解便可:

  //父類

  class Person{

    public function a(){

       echo "a";

    }

    protected function b(){

      echo "b";

    }

    private function c(){

      echo "c";

    }

  }

  $p=new Person;

  $p->a();    不會報錯

  $p->b();    會報錯

  $p->c();  會報錯

  //子類

  class Child extends Person{

    function d(){

      parent::a()      //調用父類的a方法

    }

    function e(){

      parent::b()

    }

    function f(){

      parent::c()

    }

  }

  $c=new Child;

  echo $c->d();  不會報錯

  echo $c->e();  不會報錯

  echo $c->f();   會報錯

相關文章
相關標籤/搜索