摘要:規(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
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
摘要:構(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)用在低層次的模塊上)形式,使得高層次的模塊不依賴于...
摘要:用法如果是非空或非零的值,則返回。如果已經(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)有任何屬性的...
摘要:如果還有人問(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)為它是...
摘要:這種行為比最初出現(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ì)...
閱讀 1995·2021-11-22 19:20
閱讀 2641·2021-11-22 13:54
閱讀 1970·2021-09-04 16:40
閱讀 1827·2021-08-13 11:54
閱讀 2670·2019-08-30 15:55
閱讀 3468·2019-08-29 13:51
閱讀 531·2019-08-29 11:09
閱讀 3010·2019-08-26 14:06