由一些小問題引發(fā)的思考

如何判斷數(shù)組是否為空?

  • c++實(shí)現(xiàn)
 //stl容器里面可以利用empty跟压, count等方法去判斷是否含有元素
 std::vector<int> iVec;
 if(iVec.count() <= 0 || iVec.empty()){
  // 空容器
 }
    
 // 基本的內(nèi)置類型數(shù)組 可以結(jié)合sizeof來(lái)判斷。當(dāng)然如果是數(shù)組的話测砂,就不應(yīng)該為空即供,int a[0]編譯器會(huì)報(bào)錯(cuò)感局。
 // 如果我們想判斷數(shù)組內(nèi)元素?cái)?shù)量,可以如下判斷琐凭。
 int nArray[10];
 memset(nArray, 0);
 int nCount = sizeof(nArray) / sizeof(int[0]);

  • php實(shí)現(xiàn)
 //由于php數(shù)組是動(dòng)態(tài)的芽隆,數(shù)組可以是空的
 $array = array();
 if(count($array) <=0 || sizeof($array) <= 0){
  //空:sizeof 和 count是等價(jià)的 別名關(guān)系
 }
 if(empty($array)){
  //空:
 }

關(guān)于PHP的empty函數(shù)php-manual中這樣解釋:
一下情況empty均返回 true

  • "" (空字符串)
  • 0 (作為整數(shù)的0)
  • 0.0 (作為浮點(diǎn)數(shù)的0)
  • "0" (作為字符串的0)
  • NULL
  • FALSE
  • array() (一個(gè)空數(shù)組)
  • $var; (一個(gè)聲明了,但是沒有值的變量)

php 不同類型的變量之間的比較

$x = "xxyy";
$y = 0;
var_dump(max($x , $y));     // $x

$a = 'a';
$b = 'b';
var_dump(max($a , $b) );    // $b

$arr = [1];
$num = 100;
var_dump(max($arr , $num)); // $arr

查閱了PHP Manual 得到如下反饋:
http://www.php.net/manual/zh/language.operators.comparison.php
多種類型比較時(shí)的結(jié)果统屈。
Warning
由于浮點(diǎn)數(shù) float 的內(nèi)部表達(dá)方式胚吁,不應(yīng)比較兩個(gè)浮點(diǎn)數(shù)float是否相等。


0作為除數(shù)會(huì)怎樣愁憔?

echo "如果除數(shù)是0會(huì)怎么樣?";

$num1 = 10;
$num2 = 0;
$num  = $num1/$num2; 
var_dump($num);

這時(shí)候程序運(yùn)行的時(shí)候會(huì)產(chǎn)生一條警告:

如果除數(shù)是0會(huì)怎么樣?
Warning: Division by zero in D:\temp\helloworld.php on line 18
float(INF)

所以我們?nèi)绻竺嫒匀恍枰褂?num去參與運(yùn)算的話腕扶,后面的結(jié)果肯定是無(wú)法預(yù)料的。為了保證程序運(yùn)行期間的穩(wěn)定性吨掌,我們需要除法之前判斷除數(shù)是否為0使用異常處理

曾天真地以為'使用異常處理'能捕獲到除數(shù)為0這樣的異常半抱,然而并不是:

# 剛開始以為這樣會(huì)在$num2==0的時(shí)候拋出一個(gè)異常,然而并沒有膜宋。接下來(lái)我開始懷疑是不是因?yàn)镻HP這種語(yǔ)言無(wú)法捕獲到'0作為除數(shù)'這種異常窿侈?C++一定行!
try{
    $num  = $num1/$num2;
}
catch(Exception $e){
    echo $e->getMessage();
}
# 于是我試了試C++:
int dev = 0;
int num = 10;

try{
    std::cout << "result:" << num / dev << std::endl;
}
catch(...){
    std::cout << "found exception:" << GetLastError() << std::endl;
}

看到結(jié)果的時(shí)候我為自己盲目地'自信'感覺到好笑:C++也并沒有拋出異常秋茫,報(bào)了一個(gè)運(yùn)行期間的錯(cuò)誤:

Curiosity.exe 中的 0x0104104a 處有未經(jīng)處理的異常: 0xC0000094: Integer division by zero

所以史简,這是為什么呢?最后得到的答案是這樣的:
http://stackoverflow.com/questions/10460957/why-cant-catch-exception-in-a-constructor

An Integer divided by zero is not an standard C++ exception. So You just cannot rely on an exception being thrown implicitly.
Best you can do is to check the error condition(divisor equals zero) yourself and throw an exception explicitly.

所以最后對(duì)代碼做了這樣的修改肛著,其實(shí)和手動(dòng)判斷已經(jīng)沒有太大的區(qū)別了圆兵。

$num1 = 10;
$num2 = 0;

try{
    if(intval($num2) == 0){
        throw new Exception("0 作為除數(shù)");
    }
    $num  = $num1/$num2;
}
catch(Exception $e){
    echo $e->getMessage();
}

另外,如果不加判斷的話遇到除數(shù)是0的表達(dá)式會(huì)返回一個(gè)INF值枢贿,INF means infinity 程序并不會(huì)報(bào)錯(cuò)殉农。


array_merge的小陷阱:

$ar_empty = [];
$ar_null  = null;
$array = [1,2,3];

var_export(array_merge($array, $ar_empty)); // 結(jié)果為$array的內(nèi)容
var_export(array_merge($array, $ar_null)); // 警告 結(jié)果為NULL

php 5.0 以后array_merge中僅支持?jǐn)?shù)組作為參數(shù)。 那如果傳入NULL的話局荚,不管其他元素是不是NULL统抬,結(jié)果都會(huì)是NULL。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市聪建,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茫陆,老刑警劉巖金麸,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異簿盅,居然都是意外死亡挥下,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門桨醋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)棚瘟,“玉大人,你說(shuō)我怎么就攤上這事喜最≠苏海” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵瞬内,是天一觀的道長(zhǎng)迷雪。 經(jīng)常有香客問我,道長(zhǎng)虫蝶,這世上最難降的妖魔是什么章咧? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮能真,結(jié)果婚禮上赁严,老公的妹妹穿的比我還像新娘。我一直安慰自己粉铐,他們只是感情好疼约,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著秦躯,像睡著了一般忆谓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上踱承,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天倡缠,我揣著相機(jī)與錄音,去河邊找鬼茎活。 笑死昙沦,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的载荔。 我是一名探鬼主播盾饮,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了丘损?” 一聲冷哼從身側(cè)響起普办,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徘钥,沒想到半個(gè)月后衔蹲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡呈础,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年舆驶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片而钞。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡沙廉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出臼节,到底是詐尸還是另有隱情撬陵,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布官疲,位于F島的核電站袱结,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏途凫。R本人自食惡果不足惜垢夹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望维费。 院中可真熱鬧果元,春花似錦、人聲如沸犀盟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阅畴。三九已至倡怎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間贱枣,已是汗流浹背监署。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纽哥,地道東北人钠乏。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像春塌,于是被迫代替她去往敵國(guó)和親晓避。 傳聞我的和親對(duì)象是個(gè)殘疾皇子簇捍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容