首頁>技術>

大家好,今天要給大家分享的是任何一門語言都要學習的東東語法(大牛請忽略這篇文章)。那麼php的語法是什麼樣的呢?為了給大家講解以及自己鞏固。我將php5與最新的php7的語法做了些整理。

一 關於變數

php5和7並無區別

變數以非特殊字元,數字開頭

錯誤的命名方式:$^&%name,$123name

正確的命名方式:$name123,$_Name123

二 關於include,require

大家都知道,在php5中include在碰到 程式上的錯誤的話,會發出警告,並繼續執行。而require會終止程式繼續執行。那麼在php7中是如何處理的呢?

先看一個include 的例子

=====================

b.php

<?php

if(1==2)

{

continue;

}

?>=====================

a.php

<?php

include("b.php");//b.php先執行

echo "hello"

?>

php5

結果: 輸出 "hello"

php7

結果: 輸出 PHP Fatal error: Cannot break/continue 1 level in b.php on line....

注意:

在指令碼中那個continue,php5處理時會判斷1==2是true還是false,如果是false,則直接繞過,php7中,不管1==2是否成立,它會預先判斷continue是否符合語法規則。

結論:對於include,reuqire php5 不會預判不符合語法規則,只有執行到了才會返回錯誤,而php7會預判語法規則

三 關於陣列

php7中define 一個常量陣列

<?php

define("a",[12,23,33]);

var_dump(a);

php5

結果:輸出

Use of undefined constant a - assumed 'a' in /var/www/html/array.php on line 3 string(1) "a"

php7

結果:輸出

array(3) {

[0]=>

int(12)

[1]=>

int(23)

[2]=>

int(33)

}

結論: define 在php5中不可定義為陣列在php7中可定義為陣列

php7中的變數執行方式與php5有所區別

<?php

class Test {

function a()

{

print_r("hello");

}

}

$obj = new Test();

$arr = ["a"];

$obj->$arr[0]();

php5

結果 輸出:

hello

php7

結果輸出:

PHP Fatal error: Uncaught Error: Function name must be a string in /var/www/html/array.php:13

注意:

php7 要 執行的話需要將 $obj->$arr[0]() 改成這樣 $obj->{$arr[0]}()。

如此一來php5 和php7都能執行這段程式碼。

結論:

php7程式碼執行的結合方式與php5中不同,要執行的話需要用{}顯示的處理變數結合順序

四 關於型別php本來就是弱型別語言,在php7之前除了class以外是 沒有這個要求的,那麼在php7以前要在函式或方法宣告變數型別該如何做呢?我先舉個多型的例子

例子

<?php

interface Human {

function getSex();

}

class Woman implements Human{

function __construct()

{

}

function getSex()

{

return "I am woman";

}

}

class Man implements Human {

function __construct()

{

}

function getSex()

{

return "I am man";

}

}

class Call {

function catlog(Human $p)

{

return $p->getSex();

}

}

$obj = new Call();

var_dump($obj->catlog(new Woman()));

var_dump($obj->catlog(new Man()));

php5和php7輸出結果一樣:

string(10) "I am woman"

string(8) "I am man"

注意:

Man 和Woman 都實現了Human介面,所以它們都是Human型別,即多型。Human $p 這個$p就是Human型別

在php7中可以給變數及返回值宣告型別

標量型別宣告

<?php

function test(int $a)

{

return $a;

}

var_dump(test(1));

php5 輸出結果:

PHP Catchable fatal error: Argument 1 passed to test() must be an instance of int, integer given, called in /var/www/html/type.php on line 7 and defined in /var/www/html/type.php on line 2

php7輸出結果:

int(1)

注意: test(int $a) 這個$a 之前的int 就是型別宣告

結論:

php7支援 標量型別宣告,php7以下不支援

返回值型別宣告

<?php

function test(int $a): array

{

return [$a];

}

var_dump(test(1));

php7輸出:array(1) {[0]=>int(1)}

注意:函式返回的結果型別要與宣告的型別一致 否則將報錯 。例如將return [$a] 改成 return $a,將報錯

PHP Fatal error: Uncaught TypeError: Return value of test() must be of the type array, integer returned in ....

關於太空符號

<?php

var_dump("a"<=>"a","a"<=> "b","b"<=> "a")

php5 結果 輸出:

PHP Parse error: syntax error, unexpected '>' in

php7 結果 輸出:

int(0)

int(-1)

int(1)

注意:php7以前不支援太空符操作,

結論:左邊比右邊小 則輸出 -1,比右邊大 就輸出1 相等就輸出0

16
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • VS外掛CodeRush 2021新版首發——v20.2.7