天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

2010年最新PHP類的精髓歸納第1/2頁(yè)

 一:結(jié)構(gòu)和調(diào)用(實(shí)例化):

class className{} ,調(diào)用:$obj = new className();當(dāng)類有構(gòu)造函數(shù)時(shí),還應(yīng)傳入?yún)?shù)。如$obj = new className($v,$v2...);

二:構(gòu)造函數(shù)和析構(gòu)函數(shù)
1、構(gòu)造函數(shù)用于初始化:使用__construct(),可帶參數(shù)。
2、但析構(gòu)函數(shù)不能帶參數(shù)(用于在銷去一個(gè)類之前執(zhí)行一些操作或功能)。析構(gòu)函數(shù)用__destruct()做名稱。在腳本執(zhí)行結(jié)束時(shí),php會(huì)銷掉內(nèi)存中的對(duì)象,因此可不用析造函數(shù),但有些比如COOKIE等,就應(yīng)當(dāng)要用此函數(shù)銷掉。
知識(shí)點(diǎn):在php4中也提供了構(gòu)造函數(shù),但使用的是與類同名的類方法,在php5仍能兼容這種做法,當(dāng)一個(gè)類中沒(méi)有包含__construct時(shí),會(huì)查找與類同名的方法,如果找到,就認(rèn)為是構(gòu)造函數(shù),如下:
class test
{ var $b;
function test() {   $this->b=5; }
function addab($c) {   return $this->b+$c; }
}
$a = new test();   echo $a->addab(4); // 返回 9
3、php不會(huì)自動(dòng)調(diào)用父類的構(gòu)造函數(shù)(不支持構(gòu)造函數(shù)重載),必須使用parent關(guān)鍵字顯式地調(diào)用。
class employee{
      function __construct()....
}
class Manager extents Employee{
     function __construct(){
          parent::_construct();
          echo '這個(gè)子類的父類構(gòu)造函數(shù)調(diào)用了!';
     }
}
當(dāng)然也可以調(diào)用與該實(shí)例沒(méi)有任何關(guān)系的其它類的構(gòu)造函數(shù)。只需在__construct()前加上類名即可。如:
otherClassName::__construct();

類的主家庭成員:屬性、方法、常量、靜態(tài)成員

三、類的屬性:
有兩種方法對(duì)類的屬性賦值或取值。
1、使用公共作用域public關(guān)鍵詞。
2、使用__set()和__get()來(lái)分別賦值和取值,前者稱為設(shè)置方法(setter)或修改方法(mutator),后者稱為訪問(wèn)方法(accessor)或獲取方法(getter)。建議使用這種方法:優(yōu)點(diǎn):
A、可在__set()統(tǒng)一進(jìn)行數(shù)據(jù)驗(yàn)證。
B、便于統(tǒng)一管理屬性。
注意:
第一:__set()和__get()只對(duì)私有屬性起作用,對(duì)于用public定義的屬性,它們兩個(gè)都懶理搭理,如下:
class test{
protected $a=9,$b=2,$c;
   public $d;
    function __set($n,$v) {    $this->$n = $v+2; }
    function __get($name) { return $this->$name+2; }
}
$a = new test();
$a->b =5; echo "<br />";   echo $a->b;
實(shí)例只對(duì)$a,$b,$c的設(shè)置會(huì)經(jīng)過(guò)__set和__get過(guò)濾與返回,對(duì)于$d,就不會(huì)起作用。如$a->d=5,再返回還是5。
第二:__set($n,$v)要帶兩個(gè)參數(shù)。而__get($n)只能有一個(gè)參數(shù)。實(shí)例:
class test{
      private $a=5,$b=6,$c;
      function __set($n,$v)
     {
        if($n=='a'&&$n>0)
               $this->$n = $v;
         else
               $this->$n = $v+2;    
     }
      function __get($name)
      {
            return $this->$name; //如果改為return $this->$name + $this->addab();   如調(diào)用a的值,實(shí)際返回的是a+a+b的值。默認(rèn)為5+5+6=16。
      }
      function addab()
       {         return $this->a + $this->b;   }
}
$e=new test();
$e->a = 11;   //注意寫(xiě)法:類的內(nèi)部用$this->$n即變量的寫(xiě)法,但外部實(shí)例要用$e->a的方式。
$e->b = 12;   //get 14
$e->k = 22;

類的屬性可自由擴(kuò)展,如上例的k,不管是否用__set,當(dāng)一個(gè)實(shí)例建立起來(lái)后,可以用$e->newProperty = xx;直接來(lái)創(chuàng)造一個(gè)屬性,但不建議這么做。

四、類的方法:
理解成類當(dāng)中的函數(shù)即可。
調(diào)用:
1、內(nèi)部調(diào)用:可使用$this->Fanname();或$this->addab()或test::addab();
2、實(shí)例化調(diào)用時(shí),用$e->addab();即可。對(duì)于在該方法中沒(méi)有使用$this關(guān)鍵字的,如上例中的:
function addab() {    return $this->a+$this->b;    }
改為: function addab() {    return 25;    }那在在外部實(shí)例調(diào)用該方法,也可用“$e::addab();”或“test::addab();”

五、類的常量:
如果類的屬性理解成類中的變量,那么類的常量和變量是不一樣的,其定義方法為:
class test{
      private $a;
      const PI = '3.14';
      .....
      //在類中調(diào)用上面的常量用兩種方法,“$this::PI”,或 “類名::PI”,這里就是test::PI,如下:
      function getvalue(){
            return $this->a * $this::PI; //或$this->a * test::PI,用this關(guān)鍵字或類名均可,但都要用雙冒號(hào)。
     }
}
$e= new test();
$e->PI =5;   //注意,這里用 ->只是創(chuàng)造了一個(gè)也是名為PI的屬性,而不是改變類中的PI常量的值。
echo $e::PI; //這個(gè)才是調(diào)用類的常量。
常量只能用雙冒號(hào)::來(lái)調(diào)用。并且不能更改其值。
在類外部實(shí)例化后調(diào)用類常量同樣也有兩種方法。方法為:
“$e::PI”   或 “test::PI”,共同點(diǎn)是都要用冒號(hào),不同點(diǎn)是外部不能用this關(guān)鍵字,只能用實(shí)例名,但類名::PI是通用的。

六、類的靜態(tài)成員(靜態(tài)屬性或靜態(tài)方法):
如果需要?jiǎng)?chuàng)建供所有類的實(shí)例共享的字段或方法。就得用靜態(tài)成員。有兩個(gè)特征:
1、靜態(tài)成員是共產(chǎn)主義者,它讓腳本上的所有該類的實(shí)例調(diào)用,但不能借助類的特定實(shí)例名調(diào)用,而是在類的外部,統(tǒng)一使用“類名::$成員名”的方式調(diào)用。而類的內(nèi)部則統(tǒng)一使用 “self::$成員名”來(lái)調(diào)用。
2、當(dāng)每一次新創(chuàng)建實(shí)例時(shí),靜態(tài)成員會(huì)從上次創(chuàng)建的實(shí)例最后值開(kāi)始重新計(jì)算,而不是類中初始的值開(kāi)始計(jì)算。
3、對(duì)于用public定義的靜態(tài)成員,可以在外部更改它的值。private等則不行。
class test{
       public static $v = 0;
    function __construct(){  self::$v++; }
    static function getV(){   return self::$v; }
}
$a = new test();
echo test::getV(); // 返回 1
$b = new test();
echo test::getV();   // 返回 2
test::$v=8;   //由于public定義的成員,改變靜態(tài)成員的值。
$c = new test();
echo test::getV();   // 返回 9

七、關(guān)鍵字:
(一)this關(guān)鍵字:用于類的內(nèi)部指代類的本身。來(lái)訪問(wèn)屬性或方法或常量,如$this->屬性名或方法名。$this::常量名。this還可以用在該類的子類中,來(lái)指代本身的屬性或方法。
(二)雙冒號(hào)“::”關(guān)鍵字:用于調(diào)用常量、靜態(tài)成員。
(三)self關(guān)鍵字:在類的內(nèi)部與雙冒號(hào)配合調(diào)用靜態(tài)成員,如 self::$staticVar.,在類的內(nèi)部,不能用$this來(lái)調(diào)用靜態(tài)成員。
(四)__toString():在類中使用__toString(),用于將類轉(zhuǎn)成字串并打印類,用處不大:如:
class test{     public $p;
   public function __toString(){   return var_export($this,TRUE);   }
}
$a=new test();
echo $a; //輸出:test::__set_state(array( 'p' => NULL, )),或?qū)懗桑篹cho $a->__toString();
(五)__clone() :當(dāng)克隆對(duì)象時(shí),這個(gè)關(guān)鍵字才會(huì)發(fā)生作用,用于更改克隆時(shí)某些值。
(六)__call():方法重載,參下面示例:
class cB{
function __call($method,$n){
    if($method=='showVarType'){
        if(is_numeric($n[0])){   //不能用$n。要用$n[0];
                $this->displayNum();
           }else if (is_array($n[0])){
                $this->displayArr();
         }else{
                $this->displayOther();
        }
   }
}
function displayNum() {
        echo '<h3>這是數(shù)字!</h3>';
}
function displayArr() {
      echo '<h3>這是數(shù)組!</h3>';
}
function displayOther() {
      echo '<h3>不是數(shù)組也不是數(shù)字!</h3>';
}
}

$x='a';
$y=array('a','b');
$b=new cB;
$b->showVarType($x); //不是數(shù)組也不是數(shù)字
$b->showVarType($y); //這是數(shù)組
注意,不能在類中定義showVarType()方法,否則代碼不能用。
(七)extends:繼承: 如class a{}     class b extends a{} 類b繼承了類a


附:記憶:以后統(tǒng)一在調(diào)用方法或?qū)傩詴r(shí)用 "-> ",調(diào)用常量則用雙冒號(hào)“::”,不會(huì)搞暈。

八、方法和屬性的作用域:
共有6種:public(默認(rèn),可省略,也等同于php6的var聲明),private(私有,也不能由子類使用),protected(私有,但可由子類使用) ,abstract(抽象,參下文),final(阻止在子類中覆蓋―也稱重載,阻止被繼承,用于修飾類名及方法,如final class test{ final function fun(){}} ,但不能用于屬性),static(靜態(tài))

九:抽象類和抽象方法(abstract――注意:沒(méi)有所謂抽象屬性):
抽象可以理解成父類為子類定義了一個(gè)模板或基類。作用域abstract只在父類中聲明,但在子類中實(shí)現(xiàn)。注意事項(xiàng):
1、抽象類不能被實(shí)例化,只能被子類(具體類)繼承后實(shí)現(xiàn)。
2、抽象類必須在其子類中實(shí)現(xiàn)該抽象類的所有抽象方法。否則會(huì)出錯(cuò)。
3、在抽象方法中,只是聲明,但不能具體實(shí)現(xiàn):如abstract function gettow(){ return $this->p; }是錯(cuò)的,只能聲明這個(gè)方法:abstract function gettow();(連方括號(hào){}都不要出現(xiàn)),抽象方法和抽象類主要用于復(fù)雜的類層次關(guān)系中。該層次關(guān)系需要確保每一個(gè)子類都包含并重載了某些特定的方法。這也可以通過(guò)接口實(shí)現(xiàn)
4、屬性不能被命名為抽象屬性,如abstract $p = 5是錯(cuò)的。
5、只有聲明為抽象的類可以聲明抽象方法,但如果方法聲明為抽象,就不能具體實(shí)現(xiàn)。如:
abstract class Employee
{
    abstract function a(...);
    abstract function b(...);
}
以后再對(duì)這個(gè)父類擴(kuò)展,組成各種子類(如經(jīng)理,員工,出納)。
6、抽象類中,如果要實(shí)現(xiàn)具體的方法,不能聲明為抽象。這樣可能實(shí)際意義更大。可以把幾個(gè)類庫(kù)中共同的部分提取到抽象類中,其它的類繼承抽象類即可。如下:
abstract class BaseShop{
     Const TAX=0.06;    // 在抽象類中定義常量
    public function buy($gid) {     // 如果定義為抽象方法abstract function buy()就不能在這里實(shí)現(xiàn)主體。
         echo('你購(gòu)買了ID為 :'.$gid.'的商品');
   }
      public function sell($gid) {
      echo('你賣了ID為 :'.$gid.'的商品');
      }
     public function view($gid) {
       echo('你查看了ID為 :'.$gid.'的商品');
     }
}
class BallShop extends BaseShop{
     var $itme_id = null;
     public function __construct()
    {
          $this->itme_id = 2314;
     }
     public function open()
      {
         $this->sell($this->itme_id);
     }
      public function getTax()
     {
              echo printf('<h3>平均稅率是 %d%%。</h3>',$this::TAX*100);
      }
}
$s = new BallShop;
$s->open(); //你賣了ID為 :2314的商品
$shop->getTax(); 

php技術(shù)2010年最新PHP類的精髓歸納第1/2頁(yè),轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 蜜臀AV久久国产午夜福利软件 | 小雪奶水涨翁工帮吸的推荐语录 | 亚洲va精品中文字幕 | 黑色丝袜在线观看 | 搡女人免费免费视频观看 | 成a人片亚洲日本久久 | 日本漫画母亲口工子全彩 | 久久久无码精品无码国产人妻丝瓜 | 美女被免费喷白浆视频 | 久久AV国产麻豆HD真实乱 | 亚洲精品中文字幕一二三四区 | 黑人巨大交牲老太 | 99久久久久精品国产免费麻豆 | 人妻免费视频公开上传 | 贤妻良母电影日本 | 亚洲AV人无码综合在线观看蜜桃 | 青青草国产精品久久 | 精品亚洲一区二区在线播放 | swag合集120部| 九九精品视频一区二区三区 | 女性爽爽影院免费观看 | 秋霞电影伦网理最新在线看片 | 精品亚洲视频在线观看 | 日韩欧美精品有码在线播放免费 | 亚洲国产欧美在线看片 | 曰本真人00XX动太图 | 蜜桃传媒在线观看 | 久久WWW免费人成一看片 | 翁公与小莹在客厅激情 | 2021精品国产综合久久 | 国产成人免费视频 | 99免费在线| 嗨嗨快播电影 | 欧美亚洲国产专区在线 | 在公交车上被JB草坏了被轮J了 | 国产剧情福利AV一区二区 | 高傲教师麻麻被同学调教123 | 十分钟免费观看高清视频大全 | 国产日韩精品一区二区三区在线 | 2019欧洲hd| 国产一级特黄aa毛片 |