婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > 如何避免PHP實例代碼中的一些壞代碼

如何避免PHP實例代碼中的一些壞代碼

熱門標簽:桂陽公司如何做地圖標注 宿州正規外呼系統軟件 合肥企業外呼系統線路 太原400電話申請流程 萍鄉商鋪地圖標注 電信外呼系統多少錢一個月 神龍斗士電話機器人 企業400電話辦理多少費用 代理打電話機器人

做PHP開發已經有快一年的時間了,在這一年的時間中,學習了很多生產環境中的技巧,學習了很多東西,期間也閱讀了一些優秀的源碼和關于代碼的書,對寫代碼這一塊有了一定的思考,也看過很多別人寫的好的代碼和壞的代碼,這里說說自己的感悟和改進吧。

本篇博客直說自己的感悟,在寫代碼時,我給自己立下的規則,這樣可以讓代碼清晰可讀并少走一些坑。這些簡單的規則雖然沒有設計模式看起來那么激動人心,但是,平常注意可以讓代碼看起來很清爽。

1. 不要在對象外使用未聲明的變量

這個問題其實表述起來可能不容易理解。這個問題是因為PHP語言本身的特點決定的。由于PHP是一個弱類型的動態腳本語言,所以很多情況下,給了這個語言本省很寬松的條件讓開發者去編寫代碼。但是往往這些便利也會變為坑,所以在使用一些動態語言很方便的寫法的時候,尤其要注意。

下面我們先聲明一個類,暫且叫這個類為用戶類,這個User類的背景設定為,框架自帶,不允許修改,并且隱藏在框架深處,不容易發現,實際案例可以參考laravel框架的Request類,代碼如下:

class User {
  public $username;
  public $password;
  
  public $otherInfo = [];
  
  
  public function readUserInfo() {
    return [
      'username' => $this->username,
      'password' => $this->password,
    ];
  }
  
  public function addAtri($info) {
    array_push($this->otherInfo, $info);
  }
}

這樣的代碼看似中規中矩,但是接下來,我們需要對這個類進行操作:

$user = new User();
$user->userRealName = "hello world";

這樣的代碼在PHP中是完全可以運行的,并且不會報錯,但是這樣的代碼會對之后的一些事情做為干擾。我們現在假定,上邊的代碼是在PHP web項目中是一個攔截器,或者叫做中間件也可以,然后我們在controller中會會使用到這個類的實例,并且使用到這個中間件中添加的這個變量,如下:

 class WebOperate {
   public function doOprate(User $user) {
     $user->userRealName = "hello world";
     next($user);
   }
 }

這里設定的場景是,WebOperate是一個中間件,所有的Controller都會走這個中間件后到達Controller,之后,在處理相應的Controller的功能,接下來,Controller會將中間件的實例注入進來,供控制器使用,而中間件開發人員不是很在意其的存在:

 class IndexController {
   public function index(User $user) {
     return $user->userRealName;
   }
 }

而這樣的代碼是可以完美運行的,接下來,開發人員想要的實另一個User類,這個User類中添加一些其他功能,正如之前所說,這個類在框架深處并且很難找到,且不允許修改,因為其他功能使用了這個類,所以,我們只有繼承并添加方法。根據開發經驗,開發人員會認為User類中存在這個userRealName變量,所以就造成了這個寫法:

首先是基于這個User衍生出來的Teacher類:

 class Teacher extends User {
   public function sayHello() {
     return "hello world";
   }
 }

這樣,我們的Teacher就可以sayhello了,但是,這個時候,在我們的Controller中還想知道老師的真實姓名,怎么辦?根據經驗,我們可以將注入的類換成Teacher并且返回真實姓名:

 class IndexController {
   public function index(Teacher $user) {
     return $user->userRealName;
   }
 }

那么這下問題來了,其實User類中并沒有這個類,所以這個變量根本沒有數值,但是根據經驗,是中間件已經賦值過一次了,所以我們應該可以直接使用,但是并沒有這個數值,我們開始看源碼發現,繼承的User類中根本不存在這個變量,那么這個變量之前為什么可以使用呢,因為在中間件中,給User的實力付了值。

所以我們的不能這樣直接使用未聲明的變量,在一個類中。

我們應該這樣寫:

class WebOperate {
  public function doOprate(User $user) {
    $user->addAtri([
      'userRealName' => 'hello world',
    ]);
    next($user);
  }
}

這樣的中間件,在調用的時候繼承類也可以使用同樣的方法,很簡單并且很不容易出現壞的味道。

2. 類or數組

其實這個問題同時也衍生出了另外的問題,就是函數返回值的問題。

首先,我明確表示,一個函數做多種類型的返回值是我個人感覺是不好的,在動態語言中雖然很常見,很多PHP的原生方法也有這樣的,但是,在生產中使用這樣的方式會造成函數返回的不確定性,我們需要作出很多判斷來證明我們的結論,但是,如果返回值類型只有一種,我們就可以直接判斷返回值就好了。

就像如下代碼:

public function addNewUser() {
    $res = $this->addData();
    if ($res) {
      return true;
    } else {
      return [
        'error' => 1,
        'errormsg' => "沒有添加成功"
      ];
    }
  }

這樣的代碼在作為調用者往往會多一次判斷,如下:

public function index() {
    $res = $this->addNewUser();
    if (is_array($res)  isset($res['error'])) {
      return isset($res['errormsg']) ? $res['errormsg'] : "未知錯誤";
    }
    return "成功";
  }

這樣的代碼幾乎每一次調用完成這個函數都會有這一套出現,不僅代碼不美觀,而且很臃腫。

這樣的代碼需要改善,首先限制住函數的返回值。比如,我們只讓這個函數返回bool類型的數:

public function addNewUser() {
  $res = $this->addData();
  if ($res) {
    return true;
  } else {
    return false;
  }
}

但是,顯然,很多時候,我們要的不是簡單的真價值,所以,我們會選擇返回更多信息,這個時候,我們可以有三種處理方式。

1)返回int類型的數,然后通過這個int類型的數去判斷處理結果,我們可以添加上映射關系:

class Operate{
  public $operateRes = [
    0 => '成功',
    1 => '添加失敗',
    2 => '未知錯誤',
  ];
  
  
  public function addNewUser() {
    $res = $this->addData();
    if ($res) {
      return 0;
    } else if ($res > 1) {
      return 1;
    }
    return 2;
  }
  
}

這樣方法的調用者就可以很簡單的使用方法并給出提示了:

$opera = new Operate();
$res = $opera->addNewUser();
return $opera->operateRes[$res];

給出統一的返回值類型的時候就完全不需要判斷返回值類型而且可以設置一個規范返回提示。

2)我們也可以使用數組

3)數組給人不缺定性,因為很多時候,數組里可以認為的少寫一些元素,如果少寫了,程序直接報錯,很不好。

所以第三種方式就是建議將固定格式的返回,寫成一個類,做返回的時候,使用這個類:

class Operate{
  public function addNewUser() {
    $res = $this->addData();
    $result = new Result();
    if ($res) {
      $result->errno = 0;
      $result->errmsg = "成功";
    } else if ($res > 1) {
      $result->errno = 1;
      $result->errmsg = "失敗";
    }
    $result->errno = 2;
    $result->errmsg = "未知錯誤";
    return $result;
  }
  
}

class Result {
  public $errno;
  public $errmsg;
}

這樣的返回,保證了所有變量的存在,同樣可以減少一次判斷。

所以,綜合以上,在我們返回結果的時候,盡量使用同種類型的變量,盡量減少使用數組返回。

您可能感興趣的文章:
  • PHP 獲取視頻時長的實例代碼
  • PHP多維數組指定多字段排序的示例代碼
  • Php多進程實現代碼
  • PHP 計算兩個特別大的整數實例代碼
  • PHP生成(支持多模板)二維碼海報代碼
  • PHP實現Huffman編碼/解碼的示例代碼
  • PHP實現數據庫的增刪查改功能及完整代碼
  • php無限級評論嵌套實現代碼

標簽:廊坊 崇左 辛集 衡陽 綏化 鄂州 白銀 太原

巨人網絡通訊聲明:本文標題《如何避免PHP實例代碼中的一些壞代碼》,本文關鍵詞  如何,避免,PHP,實例,代碼,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何避免PHP實例代碼中的一些壞代碼》相關的同類信息!
  • 本頁收集關于如何避免PHP實例代碼中的一些壞代碼的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产亚洲精久久久久久| 亚洲精品免费电影| 久久无码av三级| 美女视频黄 久久| 欧美日韩国产成人在线91| 亚洲v精品v日韩v欧美v专区| 欧美三级中文字幕| 亚洲成人精品在线观看| 欧美日韩高清一区二区不卡| 亚洲欧美日韩国产一区二区三区| 91美女精品福利| 一区二区三区日本| 欧美一区二区三区在线观看视频 | 五月天国产精品| 欧美日韩一区二区在线观看视频| 亚洲影院免费观看| 日韩一区二区三区免费观看| 激情偷乱视频一区二区三区| 欧美激情一区三区| 色综合久久精品| 视频一区欧美精品| 久久综合九色综合97婷婷女人 | 欧洲国内综合视频| 天堂成人国产精品一区| 精品福利一二区| av在线综合网| 日韩av一区二| 欧美国产欧美综合| 欧美人妖巨大在线| 高清成人免费视频| 亚洲精品视频在线观看免费| 成人黄色电影在线| 精品国精品国产| 99久久久国产精品免费蜜臀| 偷窥国产亚洲免费视频| 欧美高清在线一区二区| 在线观看日韩av先锋影音电影院| 免费成人av在线| 中文字幕在线视频一区| 91精品久久久久久久久99蜜臂| 成人激情校园春色| 蜜桃av噜噜一区二区三区小说| 亚洲蜜臀av乱码久久精品| 欧美成人精品1314www| 欧洲国产伦久久久久久久| 国产一区二区免费在线| 亚洲码国产岛国毛片在线| 欧美激情在线看| 日韩精品一区二区三区四区视频 | 96av麻豆蜜桃一区二区| 免费看日韩精品| 亚洲精品免费电影| 国产色综合一区| 国产激情一区二区三区四区| 欧美一级黄色片| 欧美电视剧免费观看| 日本少妇一区二区| 国产欧美在线观看一区| 天天影视网天天综合色在线播放| 国产精品丝袜黑色高跟| 精品少妇一区二区三区视频免付费 | 欧美三级视频在线播放| av一区二区三区| 国产xxx精品视频大全| 久久丁香综合五月国产三级网站 | 欧美精品一区二区三区四区| 欧美日韩国产a| 91蜜桃在线观看| 成人av高清在线| 午夜欧美电影在线观看| 色老头久久综合| 亚洲国产三级在线| 精品国产髙清在线看国产毛片| 成人综合婷婷国产精品久久免费| 亚洲女爱视频在线| 国产三级一区二区| 麻豆精品一二三| 亚洲一区二区av电影| 91官网在线观看| 欧美性受xxxx黑人xyx性爽| 欧美人狂配大交3d怪物一区| 欧美性猛片aaaaaaa做受| 亚洲欧洲另类国产综合| 亚洲视频一二三区| 一区二区三区欧美| 午夜精品视频一区| 日本不卡一二三| 国产一级精品在线| 成人av网站免费观看| 波多野结衣中文字幕一区二区三区 | 亚洲一区二区美女| 17c精品麻豆一区二区免费| 欧美影院一区二区三区| 日韩一区二区在线播放| 久久一留热品黄| 国产欧美一区二区三区沐欲| 国产精品成人午夜| 亚洲第一福利视频在线| 久久99精品国产.久久久久久 | 亚洲精品国产成人久久av盗摄| 亚洲天堂精品在线观看| 自拍偷拍亚洲激情| 亚洲制服欧美中文字幕中文字幕| 日韩不卡在线观看日韩不卡视频| 日韩成人免费在线| 国产精品亚洲视频| 91亚洲男人天堂| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 国产成人午夜视频| 午夜精品国产更新| 国产欧美综合在线观看第十页| 国产丝袜在线精品| 欧美久久久久久久久| 成人不卡免费av| 国产成人在线免费观看| 亚洲福利电影网| 日本一道高清亚洲日美韩| 欧美国产精品专区| 国产精品麻豆久久久| 在线观看不卡视频| 欧美天堂一区二区三区| 亚洲自拍欧美精品| 国产农村妇女精品| 欧美一区二区精品久久911| 午夜精品福利在线| 91女人视频在线观看| 日韩三级免费观看| 丝袜美腿亚洲一区| 秋霞电影一区二区| 亚洲成va人在线观看| 国产成人精品www牛牛影视| 欧美色综合影院| 亚洲免费观看高清在线观看| 国产在线精品一区二区不卡了 | 欧美日韩一级视频| 91久久精品一区二区二区| 不卡视频免费播放| 国产成人啪午夜精品网站男同| 亚洲国产欧美在线人成| 国产一区在线精品| 久草精品在线观看| 日本女人一区二区三区| 波多野结衣精品在线| 午夜久久电影网| 国产在线不卡一卡二卡三卡四卡| 色婷婷精品久久二区二区蜜臂av | 久久久久免费观看| 色综合久久久久综合99| 一区二区三区免费在线观看| 91在线视频免费91| 中文字幕日本乱码精品影院| 国产激情视频一区二区三区欧美| 久久看人人爽人人| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩mp4| 麻豆国产精品官网| 欧美一级日韩一级| 久久99久久久欧美国产| 欧美变态tickling挠脚心| 在线视频中文字幕一区二区| 欧美经典一区二区三区| 韩国av一区二区三区| 久久中文字幕电影| 成人性生交大片免费| 欧美视频在线不卡| 五月天中文字幕一区二区| 在线成人小视频| 日韩一区欧美小说| 成人av一区二区三区| 最新高清无码专区| 欧美色欧美亚洲另类二区| 久久精品亚洲乱码伦伦中文| 中文字幕成人av| 成人毛片在线观看| 亚洲综合一区在线| 欧美一区二区三区在| 亚洲三级电影全部在线观看高清| 91蜜桃网址入口| 五月激情六月综合| 国产人久久人人人人爽| 99久久久久免费精品国产| 婷婷中文字幕一区三区| 久久久精品黄色| 在线欧美日韩国产| 麻豆一区二区三| 欧美极品xxx| 国精产品一区一区三区mba桃花| av在线不卡电影| 亚洲一区二区三区在线| 欧美日韩国产中文| 精品视频999| 欧美日韩一区高清| 欧美日韩国产美| 欧美mv日韩mv亚洲| 国产三区在线成人av| 国产精品电影院| 樱桃国产成人精品视频| 亚洲一区二区在线免费看| 日韩精品成人一区二区在线| 美女久久久精品|