亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

PHP學習筆記之面向對象設計

2024-09-04 11:43:36
字體:
來源:轉載
供稿:網友

面向對象設計是php程序開發中一個很重要的內容塊,如果你想成為高級php程序員我們必須知道面向對象設計具體用法與寫法.

維護簡單  模塊化是面向對象編程中的一個特征.實體被表示為類和同一名字空間中具有相同功能的類,我們可以在名字空間中添加一個類而不會影響該名字空間的其他成員.

可擴充性  面向對象編程從本質上支持擴充性.如果有一個具有某種功能的類,就可以很快地擴充這個類,創建一個具有擴充的功能的類.

代碼重用  由于功能是被封裝在類中的,并且類是作為一個獨立實體而存在的,提供一個類庫就非常簡單了.

它比較適合多人合作來開發項目,所以現在很多大中型網站都選擇了用OOP來開發.本文主要講解了用php做面向對象編程的最基本的方法和代碼實例,如何創建一個class和如何生成一個class的實例等等,只是一個入門,非常的簡單,要想深學這點是遠遠不夠的.只適合php的初學者

public 表示全局,類內部外部子類都可以訪問;

實例代碼如下:

  1.       
  2.      class Test{ 
  3.          public  $name='Janking'
  4.                  $sex='male'
  5.                  $age=23; 
  6.           
  7.          function __construct(){ 
  8.              echo $this->age.''.$this->name.''.$this->sex.''
  9.          } 
  10.           
  11.           function func(){ 
  12.              echo $this->age.''.$this->name.''.$this->sex.''
  13.          } 
  14.      } 
  15.  
  16.  
  17.  $P=new Test(); 
  18.  echo ''
  19.  $P->age=100; 
  20.  $P->name="Rainy"
  21.  $P->sex="female"
  22.  $P->func(); 
  23.  ?>  

private表示私有的,只有本類內部可以使用;

實例代碼如下:

  1.       
  2.      class Test{ 
  3.          private  $name='Janking'
  4.                  $sex='male'
  5.                  $age=23; 
  6.           
  7.          function __construct(){ 
  8.              $this->funcOne(); 
  9.          } 
  10.           
  11.           function func(){ 
  12.              echo $this->age.''.$this->name.''.$this->sex.''
  13.          } 
  14.           
  15.          private function funcOne(){ 
  16.              echo $this->age.''.$this->name.''.$this->sex.''
  17.          } 
  18.      } 
  19.  
  20.  
  21.  $P=new Test(); 
  22.  echo ''
  23.  $P->func(); 
  24.  $P->age=100;        // Cannot access private property Test::$age  
  25.  $P->name="Rainy";   // Cannot access private property Test::$name  
  26.  $P->sex="female";   // Cannot access private property Test::$female 
  27.  $P->funcOne();      // Call to private method Test::funcOne() from context '' 
  28.  ?> 

protected表示受保護的,只有本類或子類或父類中可以訪問;

   - 數據抽象和信息隱藏 
   - 繼承 
   - 多態性

在PHP中使用類進行封裝的辦法,實例代碼如下:

  1. class Something {  
  2. // In OOP classes are usually named starting with a cap letter.  
  3. var $x
  4. function setX($v) {  
  5. // Methods start in lowercase then use lowercase to seprate  
  6. // words in the method name example getValueOfArea()  
  7. $this->x=$v;  
  8. function getX() {  
  9. return $this->x;  
  10. }  
  11. ?> 

當然你可以用你自己的辦法,但有一個標準總是好的.

PHP中類的數據成員使用 "var" 定義,數據成員是沒有類型直到被賦值.一個數據成員可能是一個 integer、數組、聯合數組(associative array)或甚至對象(object). 方法在類里定義成函數,在方法里存取數據成員,你必須使用$this->name 這樣的辦法,否則對方法來說是一個函數的局部變量.

使用 new 來創建一個對象,實例代碼如下:

  1. $obj = new Something;  

然后使用成員函數

實例代碼如下:

  1. $obj->setX(5);  
  2. $see = $obj->getX();  

setX 成員函數將 5 賦給對象(而不是類)obj 中成員變量, 然后 getX 返回值 5.

你也可以用對象引用來存取成員變量,例如:$obj->x=6; 然而,這不一種好的面向對象編程的方法.我堅持你應使用成員函數來設置成員變量的值和通過成員函數來讀取成員變量.如果你認為成員變量是不可存取的除了使用成員函數的辦法,你將成為一個好的面向對象程序員. 但不幸的是PHP本身沒有辦法聲明一個變量是私有的,所以允許糟糕的代碼存在.

在 PHP 中繼承使用 extend 來聲明,實例代碼如下:

  1. class Another extends Something {  
  2.  var $y;  
  3.  function setY($v) {  
  4.   // Methods start in lowercase then use lowercase to seperate  
  5.   // words in the method name example getValueOfArea()  
  6.   $this->y=$v;  
  7.  } 
  8.  function getY() {  
  9.   return $this->y;  
  10.  }  
  11. ?>  

這樣類 "Another" 的對象擁有父類的所用成員變量及方法函數,再加上自己的成員變量及成員函數.如:

實例代碼如下:

  1. $obj2=new Another;  
  2. $obj2->setX(6);  
  3. $obj2->setY(7);  

多重繼承不被支持,所以你不能讓一個類繼承多個類.

在繼承類中你可以重新定義來重定義方法,如果我們在 "Another" 重新定義 getX,那么我們不再能存取 "Something" 中的成員函數 getX. 同樣,如果我們在繼承類中聲明一個和父類同名的成員變量,那么繼承類的變量將隱藏父類的同名變量.你可以定義一個類的構造函數, 構造函數是和類同名的成員函數,在你創建類的對象時被調用.

實例代碼如下:

  1. class Something {  
  2.  var $x
  3.  function Something($y) {  
  4.   $this->x=$y;  
  5.  } 
  6.  function setX($v) {  
  7.   $this->x=$v;  
  8.  } 
  9.  function getX() {  
  10.   return $this->x;  
  11.  }  
  12. ?> 

所以可以用如下方法創建對象:

實例代碼如下:

  1. $obj=new Something(6);  

構造函數自動賦值 5 給成員變量 x, 構造函數和成員函數都是普通的PHP函數,所以你可以使用缺省參數.

實例代碼如下:

  1. function Something($x="3",$y="5")  

然后,實例代碼如下:

  1. $obj=new Something(); // x=3 and y=5  
  2. $obj=new Something(8); // x=8 and y=5  
  3. $obj=new Something(8,9); // x=8 and y=9  

省參數的定義方法和 C++ 一樣,因此你不能傳一個值給 Y 但讓 X 取缺省值,實參的傳遞是從左到右,當沒有更多的實參時函數將使用缺省參數.只有當繼承類的構造函數被調用后,繼承類的對象才被創建,父類的構造函數沒有被調用,這是PHP不同其他面向對象語言的特點,因為構造函數調用鏈是面向對象編程的特點.如果你想調用基類的構造函數,你不得不在繼承類的構造函數中顯式調用它.這樣它能工作是因為在繼承類中父類的方法全部可用.

實例代碼如下:

  1. function Another() {  
  2. $this->y=5;  
  3. $this->Something(); //explicit call to base class constructor.  
  4. ?> 

多態性,實例代碼如下:

  1. function niceDrawing($x) {  
  2. //Supose this is a method of the class Board.  
  3. $x->draw();  
  4. $obj=new Circle(3,187);  
  5. $obj2=new Rectangle(4,5); 
  6. $board->niceDrawing($obj); //will call the draw method of Circle.  
  7. $board->niceDrawing($obj2); //will call the draw method of Rectangle. 
  8. ?> 

和封裝有關的魔術方法:

 __set():是直接設置私有成員屬性值時,自動調用的方法
 __get():是直接獲取私有成員屬性值時,自動調用的方法
 __isset(); 是直接isset查看對象中私有屬性是否存時自動調用這個方法
 __unset(); 是直接unset刪除對象中私有屬性時,自動調用的方法

總的來說,雖然構建 OO 軟件的習慣不止 7 個,但是遵循這里的 7 個習慣可以使代碼符合基本 OO 設計標準.它們將為您提供更牢固的基礎,在此基礎之上建立更多 OO 習慣并構建可輕松維護與擴展的軟件.這些習慣針對模塊化的幾個主要特性.有關獨立于語言的 OO 設計優點的更多信息,請參閱 參考資料.

7 個優秀PHP OO 習慣包括:

◆保持謙虛.

◆做個好鄰居.

◆避免看到美杜莎.

◆利用最弱的鏈接.

◆您是橡皮;我是膠水.

◆限制傳播.

◆考慮使用模式.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久国产精品影视| 国产成人精品a视频一区www| 欧美一级在线亚洲天堂| www高清在线视频日韩欧美| 亚洲国产精品专区久久| 92国产精品视频| 精品无码久久久久久国产| 在线播放国产一区中文字幕剧情欧美| 亚洲第一精品电影| 欧美激情中文字幕乱码免费| 在线视频一区二区| 精品丝袜一区二区三区| 九九九热精品免费视频观看网站| 91精品视频在线免费观看| 91免费高清视频| 91精品国产九九九久久久亚洲| 亚洲一区二区久久| 日韩成人免费视频| 国产精品美女久久久免费| 亚洲成人免费网站| 欧美日韩精品在线观看| 亚洲综合中文字幕68页| 91久久夜色精品国产网站| 欧美激情xxxx| 国产亚洲精品久久久优势| 国产精品中文久久久久久久| 国产精品美女在线观看| 国产欧美一区二区三区久久| 国产美女被下药99| 久久久精品国产网站| 91中文字幕在线观看| 成人网在线免费观看| 免费不卡在线观看av| 中文字幕日韩在线观看| 在线观看国产精品淫| 欧洲日本亚洲国产区| 中文字幕在线亚洲| 亚洲深夜福利视频| 日韩精品在线免费观看视频| 国产精品第一视频| 久久成人在线视频| 久久香蕉频线观| 狠狠久久亚洲欧美专区| 日韩大陆欧美高清视频区| 亚洲美女性生活视频| 亚洲综合社区网| 日韩成人在线网站| 精品香蕉一区二区三区| 日本精品视频网站| 粗暴蹂躏中文一区二区三区| 成人久久久久爱| 亚洲自拍偷拍色图| 中文字幕亚洲欧美| 亚洲女人天堂av| 欧美猛交免费看| 久久精品国产亚洲精品2020| 26uuu亚洲伊人春色| 亚洲a级在线播放观看| 欧美日韩高清区| 美女撒尿一区二区三区| 日韩中文在线不卡| 国产精品三级美女白浆呻吟| 久久久久久久国产精品视频| 亚洲大胆人体av| 亚洲精品一区二区网址| 久久天天躁狠狠躁夜夜躁| 日韩av在线电影网| 成人写真视频福利网| 久久精品91久久香蕉加勒比| 最近免费中文字幕视频2019| 国产午夜精品一区理论片飘花| 亚洲人成毛片在线播放| 热草久综合在线| 亚洲品质视频自拍网| 成人妇女淫片aaaa视频| 91亚洲永久免费精品| 亚洲色图日韩av| 亚洲一区亚洲二区| 欧美中文字幕视频在线观看| 国产精品高清在线观看| 国产精品中文在线| 日韩免费视频在线观看| 91精品国产91久久久久久不卡| 亚洲欧美激情视频| 一夜七次郎国产精品亚洲| 日韩国产在线播放| 国产精品一区专区欧美日韩| 亚洲欧美www| 久久久久亚洲精品国产| 亚洲激情免费观看| 欧美视频精品一区| 亚洲大胆美女视频| 国产精品自产拍在线观看| 欧美激情精品久久久久| 亚洲字幕一区二区| 欧美日韩免费在线观看| 伊人精品在线观看| 久久国产精品视频| 日韩在线观看免费全| 岛国av一区二区| 亚洲精品久久久久| 91久久嫩草影院一区二区| 亚洲视频精品在线| 青青久久av北条麻妃海外网| 色爱精品视频一区| 国产精品日日摸夜夜添夜夜av| 国内偷自视频区视频综合| 久久久人成影片一区二区三区观看| 久久久久久久久国产精品| 国产精品96久久久久久| 亚洲天堂av图片| 日本电影亚洲天堂| 国产精品第8页| 日韩中文字幕在线视频| 大胆人体色综合| 欧美日韩在线观看视频小说| 亚洲人成亚洲人成在线观看| 欧美精品手机在线| 91精品国产91| 夜色77av精品影院| 国产精品女人久久久久久| 精品中文字幕久久久久久| 久久免费精品日本久久中文字幕| 日韩电影免费在线观看| 久久人人爽人人爽人人片av高清| 九色精品美女在线| 久久影视电视剧免费网站| 成人在线一区二区| 伊人伊人伊人久久| 国产精品小说在线| 亚洲va欧美va在线观看| 色婷婷综合成人av| 精品高清一区二区三区| 国产精品丝袜久久久久久高清| 6080yy精品一区二区三区| 国模精品视频一区二区三区| 成人免费看吃奶视频网站| 亚洲国产精品va在线看黑人动漫| 欧美电影免费观看| 久久精品成人动漫| 日本伊人精品一区二区三区介绍| 日韩欧美在线视频观看| 亚洲精品一区二三区不卡| 欧美专区在线播放| 国产一区二区成人| 欧美又大粗又爽又黄大片视频| 国产在线视频2019最新视频| 日韩小视频在线| 欧美日本精品在线| 久久69精品久久久久久久电影好| 亚洲国产成人精品电影| 一级做a爰片久久毛片美女图片| 亚洲999一在线观看www| 日韩经典一区二区三区| 亚洲精品久久久一区二区三区| 久久久久亚洲精品成人网小说| 国产精品1234| 精品国产欧美一区二区三区成人| 日韩在线观看免费全集电视剧网站| 日韩av片电影专区| 中文字幕欧美精品在线| 51久久精品夜色国产麻豆| 亚洲精品视频网上网址在线观看| 国产精品一区二区在线|