php面向對象


   js面向對象

     類:具有相同特征的一些對象的集合;

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

    類:通過function定義的類,所以js里類的本質為函數;

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

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

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

    引用關系:

    fn.prototype.init=function(){}

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

    他們的區別?

      前者不會改變原有引用關系,后者會改變原有的引用關系;

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

      拷貝:淺拷貝,深拷貝;

 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();   會報錯

 
 
QQ:2767789330


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM