php基礎知識補漏

php.netphp

字符串

  • heredoc結構
    相似雙引號,其中的變量會被解析。嚴格遵循下邊的格式,結束標識符這行除了可能有一個分號(;)外,絕對不能包含其它字符。
<?php
$str = <<<EOD
Example of string
spanning multiple lines
using heredoc syntax.
EOD;
//在EOD後必需要包含一個換行
  • Nowdoc
    相似單引號,只是開頭一點點變化
<?php
$str = <<<'EOD'
Example of string
spanning multiple lines
using nowdoc syntax.
EOD;
  • string 中的字符能夠經過一個從 0 開始的下標,用相似 array 結構中的方括號包含對應的數字來訪問和修改

關於字符串的編碼
PHP 中的 string 的實現方式是一個由字節組成的數組再加上一個整數指明緩衝區長度。如何將字節轉換成字符的信息,由程序員來決定。字符串由什麼值來組成並沒有限制;特別的,其值爲 0(「NUL bytes」)的字節能夠處於字符串任何位置(不過有幾個函數,在本手冊中被稱爲非「二進制安全」的,也許會把 NUL 字節以後的數據全都忽略)。
若是一個腳本的編碼是 ISO-8859-1,則其中的字符串也會被編碼爲 ISO-8859-1,以此類推。不過這並不適用於激活了 Zend Multibyte 時。程序員

  • 某些函數假定字符串是以單字節編碼的,但並不須要將字節解釋爲特定的字符。例如 substr(),strpos(),strlen() 和 strcmp()。

轉換爲對象

將一個對象轉換成對象,它將不會有任何變化。若是其它任何類型的值被轉換成對象,將會建立一個內置類 stdClass 的實例。若是該值爲 NULL,則新的實例爲空。數組轉換成對象將使鍵名成爲屬性名並具備相對應的值。對於任何其它的值,名爲 scalar 的成員變量將包含該值shell

Callback 回調類型

自 PHP 5.4 起可用 callable 類型指定回調類型 callback。數組

可變變量

在 PHP 的函數和類的方法中,超全局變量不能用做可變變量。$this 變量也是一個特殊變量,不能被動態引用。安全

魔術變量

__LINE__    文件中的當前行號。
__FILE__    文件的完整路徑和文件名。(若是是符號鏈接,則是解析後的絕對路徑)
__DIR__ 文件所在的目錄。它等價於 dirname(__FILE__)
__FUNCTION__    返回該函數被定義時的名字(區分大小寫)
__CLASS__   返回該類被定義時的名字(區分大小寫)
__METHOD__  類的方法名。返回該方法被定義時的名字(區分大小寫)
__NAMESPACE__   當前命名空間的名稱(區分大小寫)

運算符

  • $a ** $ba的b次方(php5.6+)
  • 錯誤控制運算符
    若是用 set_error_handler() 設定了自定義的錯誤處理函數,仍然會被調用,可是此錯誤處理函數能夠(而且也應該)調用 error_reporting(),而該函數在出錯語句前有 @ 時將返回 0
  • 執行運算符好比`ls -a`的效果與函數 shell_exec() 相同
    反引號運算符在激活了安全模式或者關閉了 shell_exec() 時是無效的
  • 數組運算符
    $a + $b 聯合 $a 和 $b 的聯合。兩個數組中都有的鍵名,則只用左邊數組中的,右邊的被忽略

流程控制的替代語法

在模板中使用真是棒棒的。
PHP 提供了一些流程控制的替代語法,包括 if,while,for,foreach 和 switch。替代語法的基本形式是把左花括號({)換成冒號(:),把右花括號(})分別換成 endif;,endwhile;,endfor;,endforeach; 以及 endswitch;。php7

<?php if ($a == 5): ?>
A is equal to 5
<?php endif; ?>

函數

用戶自定義函數

任何有效的 PHP 代碼都有可能出如今函數內部,甚至包括其它函數和類定義。
函數無需在調用以前被定義,除非是下面兩個例子中函數是有條件被定義時。
當一個函數是有條件被定義時,必須在調用函數以前定義。閉包

<?php
$makefoo = true;
/* 不能在此處調用foo()函數,
   由於它還不存在,但能夠調用bar()函數。*/
bar();

if ($makefoo) {
  function foo()
  {
    echo "I don't exist until program execution reaches me.\n";
  }
}
/* 如今能夠安全調用函數 foo()了,
   由於 $makefoo 值爲真 */
if ($makefoo) foo();

function bar()
{
  echo "I exist immediately upon program start.\n";
}
?>

函數的函數

PHP 中的全部函數和類都具備全局做用域,能夠定義在一個函數以內而在以外調用,反之亦然。app

<?php
function foo()
{
  function bar()
  {
    echo "I don't exist until foo() is called.\n";
  }
}
foo();

/* 如今能夠調用bar()函數了,由於foo()函數
   的執行使得bar()函數變爲已定義的函數 */
bar();
?>

函數的參數

若是想要函數的一個參數老是經過引用傳遞,能夠在函數定義中該參數的前面加上符號 &。傳引用的參數也能夠有默認值。函數

類型聲明

the given value is of the incorrect type, then an error is generated: in PHP 5, this will be a recoverable fatal error, while PHP 7 will throw a TypeError exception.ui

Class/interface name    The parameter must be an instanceof the given class or interface name.  PHP 5.0.0
array   The parameter must be an array. PHP 5.1.0
callable    The parameter must be a valid callable. PHP 5.4.0
bool    The parameter must be a boolean value.  PHP 7.0.0
float   The parameter must be a floating point number.  PHP 7.0.0
int The parameter must be an integer.   PHP 7.0.0
string  The parameter must be a string. PHP 7.0.0

默認狀況下若是能夠轉換,php會將不符合聲明的傳入參數轉換,可使用strict_type。
note

  • declare在用於strict_trpe時,不能使用declare(strict_types=1){XXXXX}結構設置declare做用域,只能是declare(strict_types=1) ;
  • Strict typing applies to function calls made from within the file with strict typing enabled, not to the functions declared within that file.

    返回類型聲明
function sum($a, $b): float {
    return $a + $b;
}

可變數量參數

在 PHP 5.6 及以上的版本中,由 ... 語法實現;在 PHP 5.5 及更早版本中(php7也可以使用),使用函數 func_num_args(),func_get_arg(),和 func_get_args() 。

...in PHP 5.6+
//...前邊能夠帶有普通參數,也能夠有類型提示(必須所有知足)
function sum(...$numbers) {
    $acc = 0;
    foreach ($numbers as $n) {
        $acc += $n;
    }
    return $acc;
}

You can also use ... when calling functions to unpack an array or Traversable variable or literal into the argument list:

function add($a, $b) {
    return $a + $b;
}
$a = [1, 2];
echo add(...$a);

可變函數

可變函數不能用於例如 echo,print,unset(),isset(),empty(),include,require 以及相似的語言結構。須要使用本身的包裝函數來將這些結構用做可變。

$foo->$funcname();
Foo::$variable();

匿名函數

匿名函數(Anonymous functions),也叫閉包函數(closures)。

$greet = function($name)
{
    printf("Hello %s\r\n", $name);
};

$greet('World');
$greet('PHP');

閉包能夠從父做用域中繼承變量。 任何此類變量都應該用 use 語言結構傳遞進去。閉包的父做用域是定義該閉包的函數(不必定是調用它的函數)

$message = 'hello';

// 繼承 $message,不用use會報錯
$example = function () use ($message) {
    var_dump($message);
};
echo $example();
相關文章
相關標籤/搜索