[轉(zhuǎn)]php5.6 升級(jí)到php7及變化

來著官方文檔:https://www.php.net/manual/zh/migration70.incompatible.php

不向后兼容的變更

錯(cuò)誤和異常處理相關(guān)的變更

在 PHP 7 中,很多致命錯(cuò)誤以及可恢復(fù)的致命錯(cuò)誤,都被轉(zhuǎn)換為異常來處理了篮昧。 這些異常繼承自?Error?類券敌,此類實(shí)現(xiàn)了?Throwable?接口 (所有異常都實(shí)現(xiàn)了這個(gè)基礎(chǔ)接口)抑堡。

這也意味著搜贤,當(dāng)發(fā)生錯(cuò)誤的時(shí)候,以前代碼中的一些錯(cuò)誤處理的代碼將無法被觸發(fā)游盲。 因?yàn)樵?PHP 7 版本中,已經(jīng)使用拋出異常的錯(cuò)誤處理機(jī)制了蛮粮。 (如果代碼中沒有捕獲?Error?異常背桐,那么會(huì)引發(fā)致命錯(cuò)誤)。

PHP 7 中的錯(cuò)誤處理的更完整的描述蝉揍,請(qǐng)參見?PHP 7 錯(cuò)誤處理链峭。 本遷移指導(dǎo)主要是列出對(duì)兼容性有影響的變更。

set_exception_handler()?不再保證收到的一定是?Exception?對(duì)象

拋出?Error?對(duì)象時(shí)又沾,如果?set_exception_handler()?里的異常處理代碼聲明了類型?Exception?弊仪,將會(huì)導(dǎo)致 fatal error。

想要異常處理器同時(shí)支持 PHP5 和 PHP7杖刷,應(yīng)該刪掉異常處理器里的類型聲明励饵。如果代碼僅僅是升級(jí)到 PHP7,則可以把類型?Exception?替換成?Throwable滑燃。


//?PHP?5?時(shí)代的代碼將會(huì)出現(xiàn)問題

function?handler(Exception?$e)?{?...?}

set_exception_handler('handler');

//?兼容?PHP?5?和?7

function?handler($e)?{?...?}

//?僅支持?PHP?7

function?handler(Throwable?$e)?{?...?}

?>

當(dāng)內(nèi)部構(gòu)造器失敗的時(shí)候役听,總是拋出異常

在之前版本中,如果內(nèi)部類的構(gòu)造器出錯(cuò),會(huì)返回?NULL?或者一個(gè)不可用的對(duì)象典予。 從 PHP 7 開始甜滨,如果內(nèi)部類構(gòu)造器發(fā)生錯(cuò)誤, 那么會(huì)拋出異常瘤袖。

解析錯(cuò)誤會(huì)拋出?ParseError?異常

解析錯(cuò)誤會(huì)拋出?ParseError?異常衣摩。 對(duì)于?eval()?函數(shù),需要將其包含到一個(gè)?catch?代碼塊中來處理解析錯(cuò)誤捂敌。

E_STRICT 警告級(jí)別變更

原有的?E_STRICT?警告都被遷移到其他級(jí)別艾扮。?E_STRICT?常量會(huì)被保留,所以調(diào)用?error_reporting(E_ALL|E_STRICT)?不會(huì)引發(fā)錯(cuò)誤占婉。

E_STRICT?警告級(jí)別變更

場(chǎng)景新的級(jí)別/行為

將資源類型的變量用作鍵來進(jìn)行索引E_NOTICE

抽象靜態(tài)方法不再警告泡嘴,會(huì)引發(fā)錯(cuò)誤

重復(fù)定義構(gòu)造器函數(shù)不再警告,會(huì)引發(fā)錯(cuò)誤

在繼承的時(shí)候逆济,方法簽名不匹配E_WARNING

在兩個(gè) trait 中包含相同的(兼容的)屬性不再警告酌予,會(huì)引發(fā)錯(cuò)誤

以非靜態(tài)調(diào)用的方式訪問靜態(tài)屬性E_NOTICE

變量應(yīng)該以引用的方式賦值E_NOTICE

變量應(yīng)該以引用的方式傳遞(到函數(shù)參數(shù)中)E_NOTICE

以靜態(tài)方式調(diào)用實(shí)例方法E_DEPRECATED

關(guān)于變量處理的變化

PHP 7 現(xiàn)在使用了抽象語(yǔ)法樹來解析源代碼。這使得許多由于之前的PHP的解釋器的限制所不可能實(shí)現(xiàn)的改進(jìn)得以實(shí)現(xiàn)纹腌。 但出于一致性的原因?qū)е铝艘恍┨厥饫拥淖儎?dòng)霎终,而這些變動(dòng)打破了向后兼容。 在這一章中將詳細(xì)介紹這些例子升薯。

關(guān)于間接使用變量莱褒、屬性和方法的變化

對(duì)變量、屬性和方法的間接調(diào)用現(xiàn)在將嚴(yán)格遵循從左到右的順序來解析涎劈,而不是之前的混雜著幾個(gè)特殊案例的情況广凸。 下面這張表說明了這個(gè)解析順序的變化。

間接調(diào)用的表達(dá)式的新舊解析順序

表達(dá)式PHP 5 的解析方式PHP 7 的解析方式

$$foo['bar']['baz']${$foo['bar']['baz']}($$foo)['bar']['baz']

$foo->$bar['baz']$foo->{$bar['baz']}($foo->$bar)['baz']

$foo->$bar['baz']()$foo->{$bar['baz']}()($foo->$bar)['baz']()

Foo::$bar['baz']()Foo::{$bar['baz']}()(Foo::$bar)['baz']()

使用了舊的從右到左的解析順序的代碼必須被重寫蛛枚,明確的使用大括號(hào)來表明順序(參見上表中間一列)谅海。 這樣使得代碼既保持了與PHP 7.x的前向兼容性,又保持了與PHP 5.x的后向兼容性蹦浦。

這同樣影響了?global?關(guān)鍵字扭吁。如果需要的話可以使用大括號(hào)來模擬之前的行為。


function?f()?{

//?Valid?in?PHP?5?only.

global?$$foo->bar;

//?Valid?in?PHP?5?and?7.

global?${$foo->bar};

}

?>

關(guān)于list()處理方式的變更

list()?不再以反向的順序來進(jìn)行賦值

list()?現(xiàn)在會(huì)按照變量定義的順序來給他們進(jìn)行賦值盲镶,而非反過來的順序侥袜。 通常來說,這只會(huì)影響list()?與數(shù)組的[]操作符一起使用的案例溉贿,如下所示:


list($a[],?$a[],?$a[])?=?[1,?2,?3];

var_dump($a);

?>

Output of the above example in PHP 5:

array(3) {

? [0]=>

? int(3)

? [1]=>

? int(2)

? [2]=>

? int(1)

}

Output of the above example in PHP 7:

array(3) {

? [0]=>

? int(1)

? [1]=>

? int(2)

? [2]=>

? int(3)

}

總之枫吧,我們推薦不要依賴list()的賦值順序,因?yàn)檫@是一個(gè)在未來也許會(huì)變更的實(shí)現(xiàn)細(xì)節(jié)宇色。

空的list()賦值支持已經(jīng)被移除

list()?結(jié)構(gòu)現(xiàn)在不再能是空的九杂。如下的例子不再被允許:


list()?=?$a;

list(,,)?=

$a;

list(

$x,?list(),?$y)?=?$a;

?>

list()不再能解開string

list()?不再能解開字符串(string)變量颁湖。 你可以使用str_split()來代替它。

Array ordering when elements are automatically created during by reference assignments has changed

The order of the elements in an array has changed when those elements have been automatically created by referencing them in a by reference assignment. For example:


$array

=?[];

$array["a"]?=&?$array["b"];

$array["b"]?=?1;

var_dump($array);

?>

Output of the above example in PHP 5:

array(2) {

? ["b"]=>

? &int(1)

? ["a"]=>

? &int(1)

}

Output of the above example in PHP 7:

array(2) {

? ["a"]=>

? &int(1)

? ["b"]=>

? &int(1)

}

函數(shù)參數(shù)附近的括號(hào)不再影響行為

在 PHP 5中例隆,在以引用方式傳遞函數(shù)參數(shù)時(shí)甥捺,使用冗余的括號(hào)對(duì)可以隱匿嚴(yán)格標(biāo)準(zhǔn) 的警告。現(xiàn)在裳擎,這個(gè)警告總會(huì)觸發(fā)涎永。


function?getArray()?{

return?[

1,?2,?3];

}

function

squareArray(array?&$a)?{

foreach?(

$a?as?&$v)?{

$v?**=?2;

}

}

//?Generates?a?warning?in?PHP?7.

squareArray((getArray()));

?>

以上例程會(huì)輸出:

Notice: Only variables should be passed by reference in /tmp/test.php on line 13

foreach的變化

foreach發(fā)生了細(xì)微的變化思币,控制結(jié)構(gòu)鹿响, 主要圍繞陣列的內(nèi)部數(shù)組指針和迭代處理的修改。

foreach不再改變內(nèi)部數(shù)組指針

在PHP7之前谷饿,當(dāng)數(shù)組通過?foreach?迭代時(shí)惶我,數(shù)組指針會(huì)移動(dòng)。現(xiàn)在開始博投,不再如此绸贡,見下面代碼


$array

=?[0,?1,?2];

foreach?(

$array?as?&$val)?{

var_dump(current($array));

}

?>

Output of the above example in PHP 5:

int(1)

int(2)

bool(false)

Output of the above example in PHP 7:

int(0)

int(0)

int(0)

foreach?通過值遍歷時(shí),操作的值為數(shù)組的副本

當(dāng)默認(rèn)使用通過值遍歷數(shù)組時(shí)毅哗,foreach?實(shí)際操作的是數(shù)組的迭代副本听怕,而非數(shù)組本身。這就意味著虑绵,foreach 中的操作不會(huì)修改原數(shù)組的值尿瞭。

foreach通過引用遍歷時(shí),有更好的迭代特性

當(dāng)使用引用遍歷數(shù)組時(shí)翅睛,現(xiàn)在?foreach?在迭代中能更好的跟蹤變化声搁。例如,在迭代中添加一個(gè)迭代值到數(shù)組中捕发,參考下面的代碼:


$array

=?[0];

foreach?(

$array?as?&$val)?{

var_dump($val);

$array[1]?=?1;

}

?>

Output of the above example in PHP 5:

int(0)

Output of the above example in PHP 7:

int(0)

int(1)

Traversable?對(duì)象的遍歷

迭代一個(gè)非Traversable對(duì)象將會(huì)與迭代一個(gè)引用數(shù)組的行為相同疏旨。 這將導(dǎo)致在對(duì)象添加或刪除屬性時(shí),foreach通過引用遍歷時(shí)扎酷,有更好的迭代特性也能被應(yīng)用

Changes to?integer?handling

無效的八進(jìn)制字符(Invalid octal literals)

在之前檐涝,一個(gè)八進(jìn)制字符如果含有無效數(shù)字,該無效數(shù)字將被靜默刪節(jié)(0128?將被解析為?012). 現(xiàn)在這樣的八進(jìn)制字符將產(chǎn)生解析錯(cuò)誤法挨。

負(fù)位移運(yùn)算(Negative bitshifts)

以負(fù)數(shù)形式進(jìn)行的位移運(yùn)算將會(huì)拋出一個(gè)?ArithmeticError


var_dump

(1?>>?-1);

?>

Output of the above example in PHP 5:

int(0)

Output of the above example in PHP 7:

Fatal error: Uncaught ArithmeticError: Bit shift by negative number in /tmp/test.php:2

Stack trace:

#0 {main}

? thrown in /tmp/test.php on line 2

超范圍后產(chǎn)生位移

超出?integer?位寬的位移操作(無論哪個(gè)方向)將始終得到 0 作為結(jié)果谁榜。在從前,這一操作是結(jié)構(gòu)依賴的坷剧。

string處理上的調(diào)整

十六進(jìn)制字符串不再被認(rèn)為是數(shù)字

含十六進(jìn)制字符串不再被認(rèn)為是數(shù)字惰爬。例如:


var_dump

("0x123"?==?"291");

var_dump(is_numeric("0x123"));

var_dump("0xe"?+?"0x1");

var_dump(substr("foo",?"0x1"));

?>

Output of the above example in PHP 5:

bool(true)

bool(true)

int(15)

string(2) "oo"

Output of the above example in PHP 7:

bool(false)

bool(false)

int(0)

Notice: A non well formed numeric value encountered in /tmp/test.php on line 5

string(3) "foo"

filter_var()?函數(shù)可以用于檢查一個(gè)?string?是否含有十六進(jìn)制數(shù)字,并將其轉(zhuǎn)換為integer:


$str

=?"0xffff";

$int?=?filter_var($str,?FILTER_VALIDATE_INT,?FILTER_FLAG_ALLOW_HEX);

if?(

false?===?$int)?{

throw?new

Exception("Invalid?integer!");

}

var_dump($int);?//?int(65535)

?>

\u{?可能引起錯(cuò)誤

由于新的?Unicode codepoint escape syntax語(yǔ)法, 緊連著無效序列并包含\u{?的字串可能引起致命錯(cuò)誤惫企。 為了避免這一報(bào)錯(cuò)撕瞧,應(yīng)該避免反斜杠開頭陵叽。

被移除的函數(shù)(Removed functions)

call_user_method()?and?call_user_method_array()

這兩個(gè)函數(shù)從PHP 4.1.0開始被廢棄,應(yīng)該使用call_user_func()?和?call_user_func_array()丛版。 你也可以考慮使用?變量函數(shù)?或者?...?操作符。

所有的 ereg* 函數(shù)

所有?ereg?系列函數(shù)被刪掉了。?PCRE?作為推薦的替代品好芭。

mcrypt?別名

已廢棄的?mcrypt_generic_end()?函數(shù)已被移除邻薯,請(qǐng)使用mcrypt_generic_deinit()代替。

此外渔嚷,已廢棄的?mcrypt_ecb(),?mcrypt_cbc(),?mcrypt_cfb()?和?mcrypt_ofb()?函數(shù)已被移除漠吻,請(qǐng)配合恰當(dāng)?shù)?b>MCRYPT_MODE_*?常量來使用?mcrypt_decrypt()進(jìn)行代替烫饼。

所有 ext/mysql 函數(shù)

所有?ext/mysql?函數(shù)已被刪掉了。 如何選擇不同的 MySQL API唐瀑,詳情請(qǐng)見?選擇 MySQL API气嫁。

所有 ext/mssql 函數(shù)

所有?ext/mssql?函數(shù)已被刪掉了。 替代品的列表寸宵,參見?MSSQL 介紹崖面。

intl?別名

已廢棄的?datefmt_set_timezone_id()?和?IntlDateFormatter::setTimeZoneID()?函數(shù)已被移除,請(qǐng)使用?datefmt_set_timezone()?與?IntlDateFormatter::setTimeZone()代替梯影。

set_magic_quotes_runtime()

set_magic_quotes_runtime(), 和它的別名?magic_quotes_runtime()已被移除. 它們?cè)赑HP 5.3.0中已經(jīng)被廢棄,并且 在in PHP 5.4.0也由于魔術(shù)引號(hào)的廢棄而失去功能巫员。

set_socket_blocking()

已廢棄的?set_socket_blocking()?函數(shù)已被移除,請(qǐng)使用stream_set_blocking()代替甲棍。

dl()?in PHP-FPM

dl()在 PHP-FPM 不再可用简识,在 CLI 和 embed SAPIs 中仍可用。

GD?Type1 functions

Support for PostScript Type1 fonts has been removed from the GD extension, resulting in the removal of the following functions:

imagepsbbox()

imagepsencodefont()

imagepsextendfont()

imagepsfreefont()

imagepsloadfont()

imagepsslantfont()

imagepstext()

推薦使用 TrueType 字體和相關(guān)的函數(shù)作為替代感猛。

被移除掉的 INI 配置指令

被移除的功能

以下 INI 配置指令已經(jīng)被移除七扰,同時(shí)移除的還有其對(duì)應(yīng)的功能

always_populate_raw_post_data

asp_tags

xsl.security_prefs

xsl.security_prefs?指令被移除 在預(yù)處理的時(shí)候,取而代之的方法?XsltProcessor::setSecurityPrefs()?應(yīng)該被調(diào)用到

其他向后兼容相關(guān)的變更

new 操作符創(chuàng)建的對(duì)象不能以引用方式賦值給變量

new?語(yǔ)句創(chuàng)建的對(duì)象不能 以引用的方式賦值給變量陪白。


class?C?{}

$c?=&?new?C;

?>

Output of the above example in PHP 5:

Deprecated: Assigning the return value of new by reference is deprecated in /tmp/test.php on line 3

Output of the above example in PHP 7:

Parse error: syntax error, unexpected 'new' (T_NEW) in /tmp/test.php on line 3

無效的類颈走、接口以及 trait 命名

不能以下列名字來命名類、接口以及 trait:

bool

int

float

string

NULL

TRUE

FALSE

此外咱士,也不要使用下列的名字來命名類立由、接口以及 trait袖瞻。雖然在 PHP 7.0 中, 這并不會(huì)引發(fā)錯(cuò)誤拆吆, 但是這些名字是保留給將來使用的聋迎。

resource

object

mixed

numeric

移除了 ASP 和 script PHP 標(biāo)簽

使用類似 ASP 的標(biāo)簽,以及 script 標(biāo)簽來區(qū)分 PHP 代碼的方式被移除枣耀。 受到影響的標(biāo)簽有:

被移除的 ASP 和 script 標(biāo)簽

開標(biāo)簽閉標(biāo)簽

<%%>

<%=%>

<script language="php"></script>

從不匹配的上下文發(fā)起調(diào)用

在不匹配的上下文中以靜態(tài)方式調(diào)用非靜態(tài)方法霉晕,?在 PHP 5.6 中已經(jīng)廢棄, 但是在 PHP 7.0 中捞奕, 會(huì)導(dǎo)致被調(diào)用方法中未定義?$this?變量牺堰,以及此行為已經(jīng)廢棄的警告。


class?A?{

public?function

test()?{?var_dump($this);?}

}

//?注意:并沒有從類?A?繼承

class?B?{

public?function

callNonStaticMethodOfA()?{?A::test();?}

}

(new

B)->callNonStaticMethodOfA();

?>

Output of the above example in PHP 5.6:

Deprecated: Non-static method A::test() should not be called statically, assuming $this from incompatible context in /tmp/test.php on line 8

object(B)#1 (0) {

}

Output of the above example in PHP 7:

Deprecated: Non-static method A::test() should not be called statically in /tmp/test.php on line 8

Notice: Undefined variable: this in /tmp/test.php on line 3

NULL

yield?變更為右聯(lián)接運(yùn)算符

在使用?yield?關(guān)鍵字的時(shí)候颅围,不再需要括號(hào)伟葫, 并且它變更為右聯(lián)接操作符,其運(yùn)算符優(yōu)先級(jí)介于?print?和?=>?之間院促。 這可能導(dǎo)致現(xiàn)有代碼的行為發(fā)生改變:


echo?yield?-1;

//?在之前版本中會(huì)被解釋為:

echo?(yield)?-?1;

//?現(xiàn)在筏养,它將被解釋為:

echo?yield?(-1);

yield?$foo?or?die;

//?在之前版本中會(huì)被解釋為:

yield?($foo?or?die);

//?現(xiàn)在,它將被解釋為:

(yield?$foo)?or?die;

?>

可以通過使用括號(hào)來消除歧義常拓。

函數(shù)定義不可以包含多個(gè)同名參數(shù)

在函數(shù)定義中渐溶,不可以包含兩個(gè)或多個(gè)同名的參數(shù)。 例如弄抬,下面代碼中的函數(shù)定義會(huì)觸發(fā)?E_COMPILE_ERROR?錯(cuò)誤:


function?foo($a,?$b,?$unused,?$unused)?{

//

}

?>

Switch 語(yǔ)句不可以包含多個(gè) default 塊

在 switch 語(yǔ)句中茎辐,兩個(gè)或者多個(gè) default 塊的代碼已經(jīng)不再被支持。 例如掂恕,下面代碼中的 switch 語(yǔ)句會(huì)觸發(fā)?E_COMPILE_ERROR?錯(cuò)誤:


switch?(1)?{

default:

break;

default:

break;

}

?>

在函數(shù)中檢視參數(shù)值會(huì)返回?當(dāng)前?的值

當(dāng)在函數(shù)代碼中使用?func_get_arg()?或?func_get_args()?函數(shù)來檢視參數(shù)值拖陆, 或者使用?debug_backtrace()?函數(shù)查看回溯跟蹤, 以及在異嘲猛觯回溯中所報(bào)告的參數(shù)值是指參數(shù)當(dāng)前的值(有可能是已經(jīng)被函數(shù)內(nèi)的代碼改變過的值)依啰, 而不再是參數(shù)被傳入函數(shù)時(shí)候的原始值了。


function?foo($x)?{

$x++;

var_dump(func_get_arg(0));

}

foo(1);?>

Output of the above example in PHP 5:

1

Output of the above example in PHP 7:

2

$HTTP_RAW_POST_DATA?被移除

不再提供?$HTTP_RAW_POST_DATA?變量斋配。 請(qǐng)使用?php://input?作為替代孔飒。

INI 文件中?#?注釋格式被移除

在 INI 文件中,不再支持以?#?開始的注釋行艰争, 請(qǐng)使用?;(分號(hào))來表示注釋坏瞄。 此變更適用于?php.ini?以及用?parse_ini_file()?和?parse_ini_string()?函數(shù)來處理的文件。

JSON 擴(kuò)展已經(jīng)被 JSOND 取代

JSON 擴(kuò)展已經(jīng)被 JSOND 擴(kuò)展取代甩卓。 對(duì)于數(shù)值的處理鸠匀,有以下兩點(diǎn)需要注意的: 第一,數(shù)值不能以點(diǎn)號(hào)(.)結(jié)束 (例如逾柿,數(shù)值?34.?必須寫作?34.0?或?34)缀棍。 第二宅此,如果使用科學(xué)計(jì)數(shù)法表示數(shù)值,e?前面必須不是點(diǎn)號(hào)(.) (例如爬范,3.e3?必須寫作?3.0e3?或?3e3)父腕。 另外,空字符串不再被視作有效的 JSON 字符串青瀑。

在數(shù)值溢出的時(shí)候璧亮,內(nèi)部函數(shù)將會(huì)失敗

將浮點(diǎn)數(shù)轉(zhuǎn)換為整數(shù)的時(shí)候,如果浮點(diǎn)數(shù)值太大斥难,導(dǎo)致無法以整數(shù)表達(dá)的情況下枝嘶, 在之前的版本中,內(nèi)部函數(shù)會(huì)直接將整數(shù)截?cái)嘌普铮⒉粫?huì)引發(fā)錯(cuò)誤群扶。 在 PHP 7.0 中,如果發(fā)生這種情況镀裤,會(huì)引發(fā) E_WARNING 錯(cuò)誤竞阐,并且返回?NULL

自定義會(huì)話處理器的返回值修復(fù)

在自定義會(huì)話處理器中淹禾,如果函數(shù)的返回值不是?FALSE馁菜,也不是?-1, 會(huì)引發(fā)致命錯(cuò)誤×宀恚現(xiàn)在,如果這些函數(shù)的返回值不是布爾值峭火,也不是?-1?或者?0毁习,函數(shù)調(diào)用結(jié)果將被視為失敗,并且引發(fā) E_WARNING 錯(cuò)誤卖丸。

相等的元素在排序時(shí)的順序問題

由于內(nèi)部排序算法進(jìn)行了提升纺且, 可能會(huì)導(dǎo)致對(duì)比時(shí)被視為相等的多個(gè)元素之間的順序不穩(wěn)定。

Note:

在對(duì)比時(shí)被視為相等的多個(gè)元素之間的排序順序是不可信賴的稍浆,即使是相等的兩個(gè)元素载碌, 他們的位置也可能被排序算法所改變。

錯(cuò)誤的使用 break 和 switch 語(yǔ)句

在循環(huán)或者?switch?語(yǔ)句之外使用?break?和?continue?被視為編譯型錯(cuò)誤(之前視為運(yùn)行時(shí)錯(cuò)誤)衅枫,會(huì)引發(fā)?E_COMPILE_ERROR?錯(cuò)誤嫁艇。

Mhash 不再是一個(gè)單獨(dú)的擴(kuò)展了

Mhash 擴(kuò)展已經(jīng)被完全整合進(jìn)?Hash?擴(kuò)展了。 因此弦撩,不要再使用?extension_loaded()?函數(shù)來檢測(cè)是否支持 MHash 擴(kuò)展了步咪, 建議使用?function_exists()?函數(shù)來進(jìn)行檢測(cè)。 另外益楼,函數(shù)?get_loaded_extensions()?以及相關(guān)的特性中猾漫,也不再報(bào)告 和 MHash 擴(kuò)展相關(guān)的信息了点晴。

declare(ticks)

declare(ticks)?指示符不再泄漏到不同的編譯單元中。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末悯周,一起剝皮案震驚了整個(gè)濱河市粒督,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌禽翼,老刑警劉巖坠陈,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異捐康,居然都是意外死亡仇矾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門解总,熙熙樓的掌柜王于貴愁眉苦臉地迎上來贮匕,“玉大人,你說我怎么就攤上這事花枫】萄危” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵劳翰,是天一觀的道長(zhǎng)敦锌。 經(jīng)常有香客問我,道長(zhǎng)佳簸,這世上最難降的妖魔是什么乙墙? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮生均,結(jié)果婚禮上听想,老公的妹妹穿的比我還像新娘。我一直安慰自己马胧,他們只是感情好汉买,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著佩脊,像睡著了一般蛙粘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上威彰,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天出牧,我揣著相機(jī)與錄音,去河邊找鬼抱冷。 笑死崔列,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播赵讯,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼盈咳,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了边翼?” 一聲冷哼從身側(cè)響起鱼响,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎组底,沒想到半個(gè)月后丈积,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡债鸡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年江滨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片厌均。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡唬滑,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出棺弊,到底是詐尸還是另有隱情晶密,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布模她,位于F島的核電站稻艰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏侈净。R本人自食惡果不足惜尊勿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望用狱。 院中可真熱鬧运怖,春花似錦、人聲如沸夏伊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)溺忧。三九已至,卻和暖如春盯孙,著一層夾襖步出監(jiān)牢的瞬間鲁森,已是汗流浹背匀哄。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工蚕苇, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓶颠。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像痛垛,于是被迫代替她去往敵國(guó)和親草慧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容