第一題:php
//1.for循環執行幾回 //for($i=0;$i=1;$i++){ // echo $i; //}
$i==1條件很成立,死循環
html
for($i=0;$i==1;$i++){ echo $i; }
因爲條件$i==1條件不成立,因此for循環不執行
web
第二題:面試
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沒有賦值,爲空null,因此返回false
//var_dump($obj->properties);
var_dump(isset($obj->name));//私有或者保護屬性不能被調用
,false
//output:bool(false),你的答案對了嗎?爲何segmentfault
第三題:foreach和取地址運算符&數組
$arr = [1,2,3,4,5,8]; foreach($arr as &$v) { //nothing todo. echo $v.'<br />'; } //&是取地址運算符,$v = &$a; 這時$v就是$a變量在內在中的存儲地址,$v改變$a一樣會改變,由於是一個地址 var_dump($arr); //1,2,3,4,5,8 foreach($arr as &$v) { //nothing todo. var_dump($arr); echo $v.'<br />'; } var_export($arr); //1,2,3,4,5,5
&是取地址運算符
,$v = &$a; 這時$v就是$a變量在內在中的存儲地址,$v改變$a一樣會改變,由於是一個地址函數
PHP foreach原理詳解this
PHP面試題,題目很短,也很常見,但更容易出錯,題目以下編碼
如何實現字符串翻轉?
第一反應,固然是strrev
函數啦,這麼容易的題目還放在面試裏考,真不嫌麻煩啊?可是看了網上的答案後,發現本身錯了~~~
strrev函數對英文很好用,直接能夠實現字符串翻轉,可是面對中文呢?確定都是亂碼,對於這樣的問題有不少,好比strstr,substr等函數都是這樣的。還好PHP提供了mb_類的函數實現不一樣編碼、不一樣語言之間的相互轉換等操做。下面是我寫的PHP字符串翻轉函數(mb_類的函數須要開啓一個mb_string實現)。
代碼:
<?php header("content-type:text/html;charset=utf-8"); /** strrev() 函數反轉字符串。 語法 strrev(string) 參數 描述 string 必需。規定要反轉的字符串。 */ /** 此函數的做用是反轉中文字符串 mb_strlen() 獲取字符的長度 mb_substr() 獲取字符的單個元素 krsort() 按照鍵值逆序排序數組,對關聯數組按照鍵名進行降序排序 Array ( [8] => 國 [7] => 中 [6] => h [5] => s [4] => i [3] => l [2] => g [1] => n [0] => E ) English中國->國中hsilgnE (ksort()對關聯數組按照鍵名進行升序排序) implode() 將數組拼接爲字符串 explode() 使用字符串分隔字符串 */ function str_rev_gb($str){ //判斷輸入的是否是utf8類型的字符,不然退出 if(!is_string($str)||!mb_check_encoding($str,'UTF-8')){ exit("輸入類型不是UTF8類型的字符串"); } $array=array(); //將字符串存入數組 $l=mb_strlen($str,'UTF-8');//在mb_strlen計算時,選定內碼爲UTF8,則會將一箇中文字符看成長度1來計算 for($i=0;$i<$l;$i++){ $array[]=mb_substr($str,$i,1,'UTF-8'); } //反轉字符串 krsort($array); //拼接字符串 $string=implode($array); return $string; } $str1 = "Englist"; $str2 = "English中國"; $str3 = "Eng中lish國"; $str4 = "中華人民共和國"; echo '直接用PHP自帶strrev函數反轉:'.'<br />'; echo $str1."->".strrev($str1)."<br>"; echo $str2."->".strrev($str2)."<br>"; echo $str3."->".strrev($str3)."<br>"; echo $str4."->".strrev($str4)."<br>"; echo '<br />'; echo $str1."->".str_rev_gb($str1)."<br>"; echo $str2."->".str_rev_gb($str2)."<br>"; echo $str3."->".str_rev_gb($str3)."<br>"; echo $str4."->".str_rev_gb($str4)."<br>";
運行結果:
直接用PHP自帶strrev函數反轉: Englist->tsilgnE English中國->��學�hsilgnE Eng中lish國->���hsil���gnE 中華人民共和國->��匒居呰溺䎍學� Englist->tsilgnE English中國->國中hsilgnE Eng中lish國->國hsil中gnE 中華人民共和國->國和共民人華中
須要注意的是,mb_strlen並非PHP核心函數
,使用前須要確保在php.ini中加載了php_mbstring.dll,即確保「extension=php_mbstring.dll」這一行存在而且沒有被註釋掉,不然會出現未定義函 數的問題。
參考文檔:PHP 實現字符串翻轉(包含中文漢字)
參考:
// 處理漢字
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函數最下面給出了支持utf-8的方案:
function utf8_strrev($str){ preg_match_all('/./us', $str, $ar); return join('',array_reverse($ar[0])); }
bool empty ( mixed var)
若是 var 是非空或非零的值,則 empty() 返回 FALSE。
換句話說,""、0、"0"、NULL、FALSE、array()
、var $var; 以及沒有任何屬性的對象都將被認爲是空的
,若是 var 爲空,則返回 TRUE
isset -- 檢測變量是否設置
描述
bool isset ( mixed var [, mixed var [, ...]])
若是 var 存在則返回 TRUE,不然返回 FALSE。
若是已經使用 unset() 釋放了一個變量以後,它將再也不是 isset()。若使用 isset() 測試一個被設置成 NULL 的變量,將返回 FALSE
。同時要注意的是一個 NULL 字節("0")並不等同於 PHP 的 NULL 常數。
注意:若是變量不存在(或者unset()釋放一個變量後)
,isset()和empty()都不會報錯;is_null(),is_numeric(),if會報錯
is_numeric 檢測變量是否爲數字或數字字符串;
is_null正好是isset的反結果,咱們能夠把它當作是!isset,是isset的一個逆操做。
警告: isset() 只能用於變量,由於傳遞任何其它參數都將形成解析錯誤。若想檢測常量是否已設置,可以使用 defined()函數。
用法:注意defined(""
),若是沒有雙引號,則會警告:undefined constant website
if(defined("website")){ echo "true"; }else{ echo "false"; }
if('' == null && '' == 0 && null == 0 && 0 =='0') echo 'if'; if('' == '0' || null == '0' ) echo 'if2';
結論:'' ,null , 0 ,'0'互相相等;'',null不等於'0'
個人博客即將同步至騰訊雲+社區,邀請你們一同入駐:https://cloud.tencent.com/dev...