溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

php容易弄不明白的知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-10-11 10:43:03 來源:億速云 閱讀:134 作者:柒染 欄目:編程語言

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è)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(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)容。

php
AI