您好,登錄后才能下訂單哦!
php容易弄不明白的知識(shí)點(diǎn)有哪些,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。
一、類中self和static的區(qū)別以及什么是后期靜態(tài)綁定(late static buildings)
self是用來調(diào)用本代碼所在類中的內(nèi)容,而static是用來調(diào)用實(shí)例中的類的內(nèi)容。
測(cè)試代碼如下:
<?php class A { public static function who() { echo __CLASS__; echo '<br>'; } public static function test() { static::who(); // 后期靜態(tài)綁定從這里開始 self::who(); } } class B extends A { public static function who() { echo __CLASS__."\n"; } } B::test();
二、ini_set用于設(shè)置當(dāng)前程序中的php配置,替換php.ini中內(nèi)容,僅用于當(dāng)前程序。
三、const 和 define 的根本區(qū)別在于,const 在編譯時(shí)定義常量,而 define 在運(yùn)行時(shí)定義常量
const FOO = 'BAR'; define('FOO', 'BAR'); // but if (...) { const FOO = 'BAR'; // 無效 } if (...) { define('FOO', 'BAR'); // 有效 }
四、isset($a['test'])最好用array_key_exists('test',$a),因?yàn)楫?dāng)$a['test']=null時(shí),isset($a['test'])會(huì)返回false
五、try{} catch(Exception $e){} finally{},無論有無出錯(cuò)finally中的內(nèi)容都會(huì)執(zhí)行,即使有return,最終也是執(zhí)行finally中的return。
六、判斷 PHP 數(shù)組是否是關(guān)聯(lián)數(shù)組的方法
function has_string_keys(array $array) { return count(array_filter(array_keys($array), 'is_string')) > 0; }
七、===運(yùn)算符返回值,當(dāng)兩邊是對(duì)象的時(shí)候,即使一個(gè)對(duì)象是另一個(gè)對(duì)象的clone,也不相等,必須兩個(gè)對(duì)象指向的地址相同才相等,但如果是一般變量,只要變量類型和值相等即可。
$a = new stdClass(); $a->foo = "bar"; $b = clone $a; var_dump($a === $b);//false $c = 10; $d = 10; var_dump($c === $d);//true
八、==號(hào)要慎重使用,如果一邊是字符串一邊是數(shù)字時(shí)就容易產(chǎn)生問題
$a = 0; echo ('pa' == $a) ? 'true' : 'false';//true $b = 1; echo ('1cedd' == $b) ? 'true' : 'false';//true
九、array_map、array_walk、array_filter,三個(gè)對(duì)數(shù)組內(nèi)容過濾或者重新計(jì)算非常好的函數(shù)。
/*array_map示例,返回用自定義函數(shù)處理完的數(shù)組*/ $func = function($value) { return $value * 2; }; print_r(array_map($func, range(1, 5))); $func2 = function($a,$b) { return $a * $b; }; //如果有多個(gè)數(shù)組傳入,則每個(gè)數(shù)組中取同樣key的值作為參數(shù) print_r(array_map($func2, range(1, 5),range(10, 50))); /*array_walk示例,對(duì)傳入數(shù)組中的每一個(gè)值使用自定義函數(shù)處理,函數(shù)的前兩個(gè)參數(shù)是value,key *還有一個(gè)array_walk_recursive遞歸對(duì)數(shù)組中的每個(gè)變量使用自定義函數(shù)*/ $fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple"); function test_alter(&$item1, $key, $prefix) { $item1 = "$prefix: $item1";//此處改變了原數(shù)組中的值 } function test_print($item2, $key) { echo "$key. $item2<br />\n"; } echo "Before ...:\n"; array_walk($fruits, 'test_print'); array_walk($fruits, 'test_alter', 'fruit'); echo "... and after:\n"; array_walk($fruits, 'test_print'); /*array_filter,返回符合自定義數(shù)組條件的變量數(shù)組,如果不傳入函數(shù)變量,則返回?cái)?shù)組中值不為0,'0',false,null值的變量*/ function odd($var) { // 返回輸入整數(shù)是否為奇數(shù)(單數(shù)) return $var & 1; } function even($var) { // 返回輸入整數(shù)是否為偶數(shù) return !($var & 1); } $array1 = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5]; $array2 = [6, 7, 8, 9, 10, 11, 12]; echo "Odd :\n"; print_r(array_filter($array1, "odd")); echo "Even:\n"; print_r(array_filter($array2, "even")); //不應(yīng)該在回調(diào)函數(shù)中改變數(shù)組(如:添加、刪除或銷毀“unset”當(dāng)前數(shù)組和里面的元素),否則此函數(shù)的行為將不可預(yù)測(cè)。
十、php是沒有函數(shù)重載功能的,php的函數(shù)是基于其名稱而不包括參數(shù),但是可以使用func_num_args() func_get_arg() func_num_args()這三個(gè)函數(shù)來實(shí)現(xiàn)類似函數(shù)重載的功能。
function foo() { $numargs = func_num_args(); echo "Number of arguments: $numargs<br />\n"; if ($numargs >= 2) { echo "Second argument is: " . func_get_arg(1) . "<br />\n"; } $arg_list = func_get_args(); for ($i = 0; $i < $numargs; $i++) { echo "Argument $i is: " . $arg_list[$i] . "<br />\n"; } } foo(1, 2, 3);
看完上述內(nèi)容,你們掌握php容易弄不明白的知識(shí)點(diǎn)有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。