成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP細(xì)節(jié):foreach、(漢子)字符串反轉(zhuǎn)、isset,empty用法區(qū)別以及0、‘’、null

孫淑建 / 2597人閱讀

摘要:規(guī)定要反轉(zhuǎn)的字符串。參考文檔實(shí)現(xiàn)字符串翻轉(zhuǎn)包含中文漢字參考處理漢字官方文檔函數(shù)最下面給出了支持的方案三用法區(qū)別以及之間關(guān)系用法如果是非空或非零的值,則返回。若想檢測(cè)常量是否已設(shè)置,可使用函數(shù)。

一、foreach

第一題:

//1.for循環(huán)執(zhí)行幾次
//for($i=0;$i=1;$i++){
//    echo $i;
//}

$i==1條件很成立,死循環(huán)

for($i=0;$i==1;$i++){
    echo $i;
}

由于條件$i==1條件不成立,所以for循環(huán)不執(zhí)行

第二題:

class SomeClass
{
    private $properties = [];
    public $j;
    public function __set($name, $value)
    {
        $this->properties[$name] = $value;
    }
    public function __get($name)
    {
        return $this->properties[$name];
    }
}


$obj = new SomeClass();
$obj->name = "phpgod";
$obj->age = 2;
$obj->gender = "male";
//$obj->j=0;
$l = null;

var_dump($obj->name);
//output:string(6) "phpgod"

var_dump($obj->j); //null
var_dump(isset($obj->j));//由于$j沒(méi)有賦值,為空null,所以返回false
//var_dump($obj->properties);
var_dump(isset($obj->name));//私有或者保護(hù)屬性不能被調(diào)用false
//output:bool(false),你的答案對(duì)了嗎?為什么

第三題:foreach和取地址運(yùn)算符&

$arr = [1,2,3,4,5,8];

foreach($arr as &$v) {
    //nothing todo.
    echo $v."
"; } //&是取地址運(yùn)算符,$v = &$a; 這時(shí)$v就是$a變量在內(nèi)在中的存儲(chǔ)地址,$v改變$a同樣會(huì)改變,因?yàn)槭且粋€(gè)地址 var_dump($arr); //1,2,3,4,5,8 foreach($arr as &$v) { //nothing todo. var_dump($arr); echo $v."
"; } var_export($arr); //1,2,3,4,5,5

&是取地址運(yùn)算符,$v = &$a; 這時(shí)$v就是$a變量在內(nèi)在中的存儲(chǔ)地址,$v改變$a同樣會(huì)改變,因?yàn)槭且粋€(gè)地址

參考文檔1:對(duì)數(shù)組兩次foreach的使用陷阱

PHP foreach原理詳解

二、(漢子)字符串反轉(zhuǎn) 包含漢字字符串亂碼

PHP面試題,題目很短,也很常見(jiàn),但更容易出錯(cuò),題目如下

如何實(shí)現(xiàn)字符串翻轉(zhuǎn)?
  第一反應(yīng),當(dāng)然是strrev函數(shù)啦,這么容易的題目還放在面試?yán)锟?,真不嫌麻煩?。康强戳司W(wǎng)上的答案后,發(fā)現(xiàn)自己錯(cuò)了~~~

  strrev函數(shù)對(duì)英文很好用,直接可以實(shí)現(xiàn)字符串翻轉(zhuǎn),但是面對(duì)中文呢?肯定都是亂碼,對(duì)于這樣的問(wèn)題有很多,比如strstr,substr等函數(shù)都是這樣的。還好PHP提供了mb_類的函數(shù)實(shí)現(xiàn)不同編碼、不同語(yǔ)言之間的相互轉(zhuǎn)換等操作。下面是我寫的PHP字符串翻轉(zhuǎn)函數(shù)(mb_類的函數(shù)需要開(kāi)啟一個(gè)mb_string實(shí)現(xiàn))。

解決方案

代碼:

 國(guó) [7] => 中 [6] => h [5] => s [4] => i [3] => l [2] => g [1] => n [0] => E ) English中國(guó)->國(guó)中hsilgnE
(ksort()對(duì)關(guān)聯(lián)數(shù)組按照鍵名進(jìn)行升序排序)
implode() 將數(shù)組拼接為字符串
explode() 使用字符串分隔字符串
 */
function str_rev_gb($str){
    //判斷輸入的是不是utf8類型的字符,否則退出
    if(!is_string($str)||!mb_check_encoding($str,"UTF-8")){
        exit("輸入類型不是UTF8類型的字符串");
    }
    $array=array();
    //將字符串存入數(shù)組
    $l=mb_strlen($str,"UTF-8");//在mb_strlen計(jì)算時(shí),選定內(nèi)碼為UTF8,則會(huì)將一個(gè)中文字符當(dāng)作長(zhǎng)度1來(lái)計(jì)算
    for($i=0;$i<$l;$i++){
        $array[]=mb_substr($str,$i,1,"UTF-8");
    }
    //反轉(zhuǎn)字符串
    krsort($array);
    //拼接字符串
    $string=implode($array);
    return $string;
}
$str1 = "Englist";
$str2 = "English中國(guó)";
$str3 = "Eng中l(wèi)ish國(guó)";
$str4 = "中華人民共和國(guó)";
echo "直接用PHP自帶strrev函數(shù)反轉(zhuǎn):"."
"; echo $str1."->".strrev($str1)."
"; echo $str2."->".strrev($str2)."
"; echo $str3."->".strrev($str3)."
"; echo $str4."->".strrev($str4)."
"; echo "
"; echo $str1."->".str_rev_gb($str1)."
"; echo $str2."->".str_rev_gb($str2)."
"; echo $str3."->".str_rev_gb($str3)."
"; echo $str4."->".str_rev_gb($str4)."
";

運(yùn)行結(jié)果:

直接用PHP自帶strrev函數(shù)反轉(zhuǎn):
Englist->tsilgnE
English中國(guó)->??學(xué)?hsilgnE
Eng中l(wèi)ish國(guó)->???hsil???gnE
中華人民共和國(guó)->??匒居呰溺?學(xué)?

Englist->tsilgnE
English中國(guó)->國(guó)中hsilgnE
Eng中l(wèi)ish國(guó)->國(guó)hsil中g(shù)nE
中華人民共和國(guó)->國(guó)和共民人華中

需要注意的是,mb_strlen并不是PHP核心函數(shù),使用前需要確保在php.ini中加載了php_mbstring.dll,即確保“extension=php_mbstring.dll”這一行存在并且沒(méi)有被注釋掉,否則會(huì)出現(xiàn)未定義函 數(shù)的問(wèn)題。
參考文檔:PHP 實(shí)現(xiàn)字符串翻轉(zhuǎn)(包含中文漢字)

參考:
// 處理漢字

function strReverseMb($str) {
    $revStr = "";
    if (is_string($str) && mb_check_encoding($str, "UTF-8")) {
        $len = mb_strlen($str);

        for ($i = $len-1; $i>=0; $i--) {
            $revStr .= mb_substr($str, $i, 1, "UTF-8");
        }
    }
    return $revStr;
}

php官方文檔strrev函數(shù)最下面給出了支持utf-8的方案:

function utf8_strrev($str){
    preg_match_all("/./us", $str, $ar);
    return join("",array_reverse($ar[0]));
}
三、isset、empty、if用法區(qū)別以及0、‘’、null之間關(guān)系 3.1 empty用法

bool empty ( mixed var)
如果 var 是非空或非零的值,則 empty() 返回 FALSE。
換句話說(shuō),""、0、"0"、NULL、FALSE、array()、var $var; 以及沒(méi)有任何屬性的對(duì)象都將被認(rèn)為是空的,如果 var 為空,則返回 TRUE

3.2 isset()

isset -- 檢測(cè)變量是否設(shè)置
描述
bool isset ( mixed var [, mixed var [, ...]])
如果 var 存在則返回 TRUE,否則返回 FALSE。
如果已經(jīng)使用 unset() 釋放了一個(gè)變量之后,它將不再是 isset()。若使用 isset() 測(cè)試一個(gè)被設(shè)置成 NULL 的變量,將返回 FALSE。同時(shí)要注意的是一個(gè) NULL 字節(jié)("0")并不等同于 PHP 的 NULL 常數(shù)。

注意:如果變量不存在(或者unset()釋放一個(gè)變量后),isset()和empty()都不會(huì)報(bào)錯(cuò);is_null(),is_numeric(),if會(huì)報(bào)錯(cuò)

is_numeric 檢測(cè)變量是否為數(shù)字或數(shù)字字符串;
is_null正好是isset的反結(jié)果,我們可以把它看成是!isset,是isset的一個(gè)逆操作。

警告: isset() 只能用于變量,因?yàn)閭鬟f任何其它參數(shù)都將造成解析錯(cuò)誤。若想檢測(cè)常量是否已設(shè)置,可使用 defined()函數(shù)。
用法:注意defined(""),如果沒(méi)有雙引號(hào),則會(huì)警告:undefined constant website

if(defined("website")){
    echo "true";
}else{
    echo "false";
}
3.3 0、‘’、null之間相等關(guān)系
if("" == null && "" == 0 && null ==  0 && 0 =="0") echo "if";

if("" == "0" || null == "0" ) echo "if2";

結(jié)論:"" ,null , 0 ,"0"互相相等;"",null不等于"0"

我的博客即將同步至騰訊云+社區(qū),邀請(qǐng)大家一同入駐:https://cloud.tencent.com/dev...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30979.html

相關(guān)文章

  • Yii2中的依賴注入

    摘要:構(gòu)造器注入實(shí)現(xiàn)特定參數(shù)的構(gòu)造函數(shù),在新建對(duì)象時(shí)傳入所依賴類型的對(duì)象。 基本概念 1.依賴倒置(反轉(zhuǎn))原則(DIP):一種軟件架構(gòu)設(shè)計(jì)的原則(抽象概念,是一種思想)在面向?qū)ο缶幊填I(lǐng)域中,依賴反轉(zhuǎn)原則(Dependency inversion principle,DIP)是指一種特定的解耦(傳統(tǒng)的依賴關(guān)系創(chuàng)建在高層次上,而具體的策略設(shè)置則應(yīng)用在低層次的模塊上)形式,使得高層次的模塊不依賴于...

    harriszh 評(píng)論0 收藏0
  • PHPisset,empty,is_null用法區(qū)別

    摘要:用法如果是非空或非零的值,則返回。如果已經(jīng)使用釋放了一個(gè)變量之后,它將不再是。若使用測(cè)試一個(gè)被設(shè)置成的變量,將返回。同時(shí)要注意的是一個(gè)字節(jié)并不等同于的常數(shù)。 1.empty用法bool empty ( mixed var)如果 var 是非空或非零的值,則 empty() 返回 FALSE。換句話說(shuō),、0、0、NULL、FALSE、array()、var $var; 以及沒(méi)有任何屬性的...

    fou7 評(píng)論0 收藏0
  • [PHP]一張圖片徹底弄清isset empty函數(shù)區(qū)別?。?!

    摘要:如果還有人問(wèn)你兩者區(qū)別,馬上甩出這種圖有興趣可以往下閱讀,官方手冊(cè)給出的例子手冊(cè)這是一張將區(qū)別的表格,從表格中我們可以發(fā)現(xiàn)返回值等同返回值等同。 簡(jiǎn)單談一下isset和empty的區(qū)別? 如果你是在面試,碰巧面試官提了這個(gè)問(wèn)題。你可以這樣回答: 如果變量值為0、空字符串、空數(shù)組等等,empty認(rèn)為它是空的,而isset認(rèn)為它不是空的。 如果變量不存在,isset和empty都認(rèn)為它是...

    venmos 評(píng)論0 收藏0
  • 十個(gè) PHP 開(kāi)發(fā)者最容易犯的錯(cuò)誤

    摘要:這種行為比最初出現(xiàn)的問(wèn)題更為棘手,同時(shí)也是一種常見(jiàn)的錯(cuò)誤源。這意味著這個(gè)數(shù)組的一份拷貝將會(huì)被返回,因此被調(diào)函數(shù)與調(diào)用者所訪問(wèn)的數(shù)組并不是同樣的數(shù)組實(shí)例。 showImg(https://segmentfault.com/img/bV7reP?w=620&h=620); PHP 語(yǔ)言讓 WEB 端程序設(shè)計(jì)變得簡(jiǎn)單,這也是它能流行起來(lái)的原因。但也是因?yàn)樗暮?jiǎn)單,PHP 也慢慢發(fā)展成一個(gè)相對(duì)...

    fireflow 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<