国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
PHP中文手冊(cè)2,
Comparing generators with Iterator objects
首頁(yè) 后端開(kāi)發(fā) php教程 PHP中文手冊(cè)2,_PHP教程

PHP中文手冊(cè)2,_PHP教程

Jul 13, 2016 am 09:44 AM
php 中文 以用 內(nèi)置 處理 異常 手冊(cè) 擴(kuò)展 用戶 自定義

PHP中文手冊(cè)2,

<code><code> 11.異常處理 <code><code>

用戶可以用自定義的異常處理類來(lái)擴(kuò)展 PHP 內(nèi)置的異常處理類。以下的代碼說(shuō)明了在內(nèi)置的異常處理類中,哪些屬性和方法在子類中是可訪問(wèn)和可繼承的。譯者注:以下這段代碼只為說(shuō)明內(nèi)置異常處理類的結(jié)構(gòu),它并不是一段有實(shí)際意義的可用代碼。

<code><?php <br />class?Exception{<br>protected?$message?=?'Unknown exception';?// 異常信息<br>protected?$code?=?0;?// 用戶自定義異常代碼<br>protected?$file;?// 發(fā)生異常的文件名<br>protected?$line;?// 發(fā)生異常的代碼行號(hào)<br>function?__construct($message?=?null,?$code?=?0);<br>final function?getMessage();?// 返回異常信息<br>final function?getCode();?// 返回異常代碼<br>final function?getFile();?// 返回發(fā)生異常的文件名<br>final function?getLine();?// 返回發(fā)生異常的代碼行號(hào)<br>final function?getTrace();?// backtrace() 數(shù)組<br>final function?getTraceAsString();?// 已格成化成字符串的 getTrace() 信息<br>/* 可重載的方法 */<br>function?__toString();?// 可輸出的字符串<br>}<br>?>

如果使用自定義的類來(lái)擴(kuò)展內(nèi)置異常處理類,并且要重新定義構(gòu)造函數(shù)的話,建議同時(shí)調(diào)用?parent::__construct()來(lái)檢查所有的變量是否已被賦值。當(dāng)對(duì)象要輸出字符串的時(shí)候,可以重載?__toString()?并自定義輸出的樣式。

擴(kuò)展 PHP 內(nèi)置的異常處理類

<code><?php <br />// 自定義一個(gè)異常處理類<br>class?MyException?extends?Exception{ ? ?// 重定義構(gòu)造器使 message 變?yōu)楸仨毐恢付ǖ膶傩?lt;br>? ? public function?__construct($message,?$code?=?0) {<br>? ? ? ? // 自定義的代碼 ? ?// 確保所有變量都被正確賦值<br>? ? ? ? parent::__construct($message,?$code);<br>}<br>// 自定義字符串輸出的樣式<br>public function?__toString() {<br>? ? return?__CLASS__?.?": [{$this->code}]:?{$this->message}\n";<br>}<br>public function?customFunction() {<br>? ? echo?"A Custom function for this type of exception\n";<br>? ? }<br>}<br><span>//</span>創(chuàng)建一個(gè)用于測(cè)試異常處理機(jī)制的類<br>class?TestException{<br>public?$var;<br>const?THROW_NONE?=?0;<br>const?THROW_CUSTOM?=?1;<br>const?THROW_DEFAULT?=?2;<br>function?__construct($avalue?=?self::THROW_NONE) {<br>switch ($avalue) {<br>case?self::THROW_CUSTOM:<br>// 拋出自定義異常<br>throw new?MyException('1 is an invalid parameter',?5);<br>break;<br>case?self::THROW_DEFAULT:<br>// 拋出默認(rèn)的異常<br>throw new?Exception('2 isnt allowed as a parameter',?6);<br>break;<br>default:<br>// 沒(méi)有異常的情況下,創(chuàng)建一個(gè)對(duì)象<br>$this->var?=?$avalue;<br>break;<br>}<br>}<br>}<br>// 例子 1<br>try {<br>$o?= new?TestException(TestException::THROW_CUSTOM);<br>} catch (MyException $e) {?// 捕獲異常<br>echo?"Caught my exception\n",?$e;<br>$e->customFunction();<br>} catch (Exception $e) {?// 被忽略<br>echo?"Caught Default Exception\n",?$e;<br>}<br>// 執(zhí)行后續(xù)代碼<br>var_dump($o);<br>echo?"\n\n";<br>// 例子 2<br>try {<br>$o?= new?TestException(TestException::THROW_DEFAULT);<br>} catch (MyException $e) {?// 不能匹配異常的種類,被忽略<br>echo?"Caught my exception\n",?$e;<br>$e->customFunction();<br>} catch (Exception $e) {?// 捕獲異常<br>echo?"Caught Default Exception\n",?$e;<br>}<br>// 執(zhí)行后續(xù)代碼<br>var_dump($o);<br>echo?"\n\n";<br>// 例子 3<br>try {<br>$o?= new?TestException(TestException::THROW_CUSTOM);<br>} catch (Exception $e) {?// 捕獲異常<br>echo?"Default Exception caught\n",?$e;<br>}<br>// 執(zhí)行后續(xù)代碼<br>var_dump($o);<br>echo?"\n\n";<br>// 例子 4<br>try {<br>$o?= new?TestException();<br>} catch (Exception $e) {?// 沒(méi)有異常,被忽略<br>echo?"Default Exception caught\n",?$e;<br>}<br>// 執(zhí)行后續(xù)代碼<br>var_dump($o);<br>echo?"\n\n";<br>?> 12.生成器 <code><code>

生成器允許你在?foreach代碼塊中寫代碼來(lái)迭代一組數(shù)據(jù)而不需要在內(nèi)存中創(chuàng)建一個(gè)數(shù)組, 那會(huì)使你的內(nèi)存達(dá)到上限,或者會(huì)占據(jù)可觀的處理時(shí)間。相反,你可以寫一個(gè)生成器函數(shù),就像一個(gè)普通的自定義函數(shù)一樣, 和普通函數(shù)只返回一次不同的是, 生成器可以根據(jù)需要?yield?多次,以便生成需要迭代的值。

<code><?php <br />function?xrange($start,?$limit,?$step?=?1) {<br>? ? if ($start?? ? ? ? if ($step?? ? ? ? ? ? throw new?LogicException('Step must be +ve');<br>}<br>? ? ? ? for ($i?=?$start;?$i?? ? ? ? ? ? yield?$i;<br>? ? ? ? }<br>? ? } else {<br>? ? ? ? if ($step?>=?0) {<br>? ? ? ? ? ? throw new?LogicException('Step must be -ve');<br>? ? ? ? }<br>? ? ? ? for ($i?=?$start;?$i?>=?$limit;?$i?+=?$step) {<br>? ? ? ? ? ? yield?$i;<br>? ? ? ? }<br>? ? }<br>}<br>/* Note that both range() and xrange() result in the same<br>* output below. */<br>echo?'Single digit odd numbers from range(): ';<br>foreach (range(1,?9,?2) as?$number) {<br>? ? echo?"$number?";<br>}<br>echo?"\n";<br>echo?'Single digit odd numbers from xrange(): ';<br>foreach (xrange(1,?9,?2) as?$number) {<br>? ? echo?"$number?";<br>}<br>?>
Single digit odd numbers from range():  1 3 5 7 9 
Single digit odd numbers from xrange(): 1 3 5 7 9 

Comparing generators with Iterator objects

The primary advantage of generators is their simplicity. Much less boilerplate code has to be written compared to implementing anIterator class, and the code is generally much more readable. For example, the following function and class are equivalent:

<code><?php<br />function getLinesFromFile($fileName) {<br /> if (!$fileHandle = fopen($fileName, 'r')) {<br /> return;<br />}<br />while (false !== $line = fgets($fileHandle)) {<br /> yield $line;<br />}<br />fclose($fileHandle);<br />}<br />// versus...<br />class LineIterator implements Iterator {<br /> protected $fileHandle;<br /> protected $line;<br /> protected $i;<br /> public function __construct($fileName) {<br /> if (!$this->fileHandle = fopen($fileName, 'r')) {<br /> throw new RuntimeException('Couldn\'t open file "' . $fileName . '"');<br /> }<br /> }<br /> public function rewind() {<br /> fseek($this->fileHandle, 0);<br /> $this->line = fgets($this->fileHandle);<br /> $this->i = 0;<br /> }<br /> public function valid() {<br /> return false !== $this->line;<br /> }<br /> public function current() {<br /> return $this->line;<br /> }<br /> public function key() {<br /> return $this->i;<br /> }<br /> public function next() {<br /> if (false !== $this->line) {<br /> $this->line = fgets($this->fileHandle);<br /> $this->i++;<br /> }<br /> }<br /> public function __destruct() {<br /> fclose($this->fileHandle);<br /> }<br /> }<br />?> 13.引用 <code><code> <code><?php<br />$a =& $b; //這意味著 <var><var>$a</var></var> 和 <var><var>$b</var></var> 指向了同一個(gè)變量。<var><var>$a</var></var> 和 <var><var>$b</var></var> 在這里是完全相同的,這并不是 <var><var>$a</var></var> 指向了 <var><var>$b</var></var> 或者&middot; //相反,而是 <var><var>$a</var></var> 和 <var><var>$b</var></var> 指向了同一個(gè)地方。<br />?> <code>

如果具有引用的數(shù)組被拷貝,其值不會(huì)解除引用。對(duì)于數(shù)組傳值給函數(shù)也是如此。如果對(duì)一個(gè)未定義的變量進(jìn)行引用賦值、引用參數(shù)傳遞或引用返回,則會(huì)自動(dòng)創(chuàng)建該變量。

function foo(&$var) { }

foo($a); // $a is "created" and assigned to null

$b = array();

foo($b['b']);

var_dump(array_key_exists('b', $b)); // bool(true)

$c = new StdClass;

foo($c->d);

var_dump(property_exists($c, 'd')); // bool(true)

?>

同樣的語(yǔ)法可以用在函數(shù)中,它返回引用,以及用在 new運(yùn)算符中(PHP 4.0.4 以及以后版本):

<code><span><?php<br />$bar =& new fooclass();<br />$foo =& find_var($bar);<br />?></span>

如果在一個(gè)函數(shù)內(nèi)部給一個(gè)聲明為 global的變量賦于一個(gè)引用,該引用只在函數(shù)內(nèi)部可見(jiàn)??梢酝ㄟ^(guò)使用 $GLOBALS 數(shù)組避免這一點(diǎn)。在函數(shù)內(nèi)引用全局變量:

<code><span><?php<br />$var1 = "Example variable";<br />$var2 = "";<br />function global_references($use_globals){<br /> global $var1, $var2;<br /> if (!$use_globals) {<br /> $var2 =& $var1; // visible only inside the function<br /> } else {<br /> $GLOBALS["var2"] =& $var1; // visible also in global context<br /> }<br />}<br />global_references(false);<br />echo "var2 is set to '$var2'\n"; // var2 is set to ''<br />global_references(true);<br />echo "var2 is set to '$var2'\n"; // var2 is set to 'Example variable'<br />?></span> global $var; 當(dāng)成是 $var =& $GLOBALS['var']; 的簡(jiǎn)寫。從而將其它引用賦給 $var 只改變了本地變量的引用。

如果在 foreach語(yǔ)句中給一個(gè)具有引用的變量賦值,被引用的對(duì)象也被改變。

$ref = 0;

$row =& $ref;

foreach (array(1, 2, 3) as $row) {// do something}

echo $ref; // 3 - last element of the iterated array

?>

引用做的第二件事是用引用傳遞變量。這是通過(guò)在函數(shù)內(nèi)建立一個(gè)本地變量并且該變量在呼叫范圍內(nèi)引用了同一個(gè)內(nèi)容來(lái)實(shí)現(xiàn)的。例如:

<code><span><?php<br />function foo(&$var){<br /> $var++;<br />}<br />$a=5;<br />foo($a);<br />?></span> 將使 $a 變成 6。這是因?yàn)樵?foo 函數(shù)中變量 $var 指向了和 $a 指向的同一個(gè)內(nèi)容。更多詳細(xì)解釋見(jiàn)引用傳遞。 引用做的第三件事是引用返回。引用不是指針。

可以將一個(gè)變量通過(guò)引用傳遞給函數(shù),這樣該函數(shù)就可以修改其參數(shù)的值。

<code><span><?php<br />function foo(&$var){<br />$var++;<br />}<br />$a=5;<br />foo($a);// $a is 6 here<br />?></span> 注意在函數(shù)調(diào)用時(shí)沒(méi)有引用符號(hào)——只有函數(shù)定義中有。光是函數(shù)定義就足夠使參數(shù)通過(guò)引用來(lái)正確傳遞了

以下內(nèi)容可以通過(guò)引用傳遞:

變量,例如 foo($a);New 語(yǔ)句,例如 foo(new foobar());從函數(shù)中返回的引用

任何其它表達(dá)式都不能通過(guò)引用傳遞,結(jié)果未定義。

<code><span><?php<br />function bar(){ // Note the missing &<br />$a = 5;<br />return $a;<br />}<br />foo(bar()); // 自 PHP 5.0.5 起導(dǎo)致致命錯(cuò)誤<br />foo($a = 5) // 表達(dá)式,不是變量<br />foo(5) // 導(dǎo)致致命錯(cuò)誤<br />?></span>

引用返回用在當(dāng)想用函數(shù)找到引用應(yīng)該被綁定在哪一個(gè)變量上面時(shí)。不要用返回引用來(lái)增加性能,引擎足夠聰明來(lái)自己進(jìn)行優(yōu)化。僅在有合理的技術(shù)原因時(shí)才返回引用!要返回引用,使用此語(yǔ)法:

<code><span><?php<br />class foo {<br /> public $value = 42;<br /> public function &getValue() {<br /> return $this->value;<br /> }<br />}<br />$obj = new foo;<br />$myValue = &$obj->getValue(); // $myValue is a reference to $obj->value, which is 42.<br />$obj->value = 2;<br />echo $myValue; // prints the new value of $obj->value, i.e. 2.<br />?></span> 本例中 getValue 函數(shù)所返回的對(duì)象的屬性將被賦值,而不是拷貝,就和沒(méi)有用引用語(yǔ)法一樣。和參數(shù)傳遞不同,這里必須在兩個(gè)地方都用 &符號(hào)——指出返回的是一個(gè)引用,而不是通常的一個(gè)拷貝,同樣也指出 $myValue是作為引用的綁定,而不是通常的賦值。當(dāng) unset 一個(gè)引用,只是斷開(kāi)了變量名和變量?jī)?nèi)容之間的綁定。這并不意味著變量?jī)?nèi)容被銷毀了。 <code><span><?php<br />$a = 1;<br />$b =& $a;<br />unset($a);<br />?></span> 不會(huì) unset $b,只是 $a。引用定位: global引用:當(dāng)用 global $var 聲明一個(gè)變量時(shí)實(shí)際上建立了一個(gè)到全局變量的引用。也就是說(shuō)和這樣做是相同的: <code><span><?php<br />$var =& $GLOBALS["var"]; //這意味著,例如,unset <var><var>$var</var></var> 不會(huì) unset 全局變量。<br />?></span> $this:在一個(gè)對(duì)象的方法中,$this 永遠(yuǎn)是調(diào)用它的對(duì)象的引用。

14.預(yù)定義變量

超全局變量 — 超全局變量是在全部作用域中始終可用的內(nèi)置變量PHP 中的許多預(yù)定義變量都是"超全局的",這意味著它們?cè)谝粋€(gè)腳本的全部作用域中都可用。在函數(shù)或方法中無(wú)需執(zhí)行 global $variable; 就可以訪問(wèn)它們。這些超全局變量是:

$GLOBALS;$_SERVER;$_GET;$_POST;$_FILES;$_COOKIE;$_SESSION;$_REQUEST;$_ENV

默認(rèn)情況下,所有的超全局變量都是可用的。但是,有一些指令會(huì)影響這種可用性。

$GLOBALS — 引用全局作用域中可用的全部變量一個(gè)包含了全部變量的全局組合數(shù)組。變量的名字就是數(shù)組的鍵。

<code><span><?php<br />function test() {<br />$foo = "local variable";<br />echo '$foo in global scope: ' . $GLOBALS["foo"] . "\n";//$foo in global scope: Example content<br />echo '$foo in current scope: ' . $foo . "\n";//$foo in current scope: local variable<br />}<br />$foo = "Example content";<br />test();<br />?></span>

"Superglobal"也稱為自動(dòng)化的全局變量。這就表示其在腳本的所有作用域中都是可用的。不需要在函數(shù)或方法中用global $variable; 來(lái)訪問(wèn)它。與所有其他超全局變量不同,$GLOBALS在PHP中總是可用的。

$_SERVER 是一個(gè)包含了諸如頭信息(header)、路徑(path)、以及腳本位置(script locations)等等信息的數(shù)組。這個(gè)數(shù)組中的項(xiàng)目由

Web 服務(wù)器創(chuàng)建。在 $_SERVER 中,你也許能夠,也許不能夠找到下面的這些元素。列舉:

'PHP_SELF':當(dāng)前執(zhí)行腳本的文件名,與 document root 有關(guān)。例如,在地址為 http://example.com/test.php/foo.bar 的腳本中使用

$_SERVER['PHP_SELF'] 將得到 /test.php/foo.bar。

'SERVER_ADDR':當(dāng)前運(yùn)行腳本所在的服務(wù)器的 IP 地址。

'SERVER_NAME':當(dāng)前運(yùn)行腳本所在的服務(wù)器的主機(jī)名。如果腳本運(yùn)行虛擬主機(jī),該名稱是由那個(gè)虛擬主機(jī)所設(shè)置的值決定。

'SERVER_PROTOCOL':請(qǐng)求頁(yè)面時(shí)通信協(xié)議的名稱和版本。例如,"HTTP/1.0"。

'REQUEST_METHOD':訪問(wèn)頁(yè)面使用的請(qǐng)求方法;例如,"GET", "HEAD","POST","PUT"。

'REQUEST_TIME':請(qǐng)求開(kāi)始時(shí)的時(shí)間戳。從 PHP 5.1.0 起可用。

'QUERY_STRING':query string(查詢字符串),如果有的話,通過(guò)它進(jìn)行頁(yè)面訪問(wèn)。

'HTTP_HOST':當(dāng)前請(qǐng)求頭中 Host: 項(xiàng)的內(nèi)容,如果存在的話。

'HTTP_REFERER':引導(dǎo)用戶代理到當(dāng)前頁(yè)的前一頁(yè)的地址(如果存在)。由 user agent 設(shè)置決定。并不是所有的用戶代理都會(huì)設(shè)置該項(xiàng),有的還提供了修改 HTTP_REFERER 的功能。簡(jiǎn)言之,該值并不可信。

'HTTP_USER_AGENT':當(dāng)前請(qǐng)求頭中 User-Agent: 項(xiàng)的內(nèi)容,如果存在的話。該字符串表明了訪問(wèn)該頁(yè)面的用戶代理的信息。

'REMOTE_ADDR':瀏覽當(dāng)前頁(yè)面的用戶的 IP 地址。

'REMOTE_HOST':瀏覽當(dāng)前頁(yè)面的用戶的主機(jī)名。DNS 反向解析不依賴于用戶的 REMOTE_ADDR。

'SERVER_PORT':Web 服務(wù)器使用的端口。默認(rèn)值為 "80"。如果使用 SSL 安全連接,則這個(gè)值為用戶設(shè)置的 HTTP 端口。

$_GET:通過(guò) URL 參數(shù)傳遞給當(dāng)前腳本的變量的數(shù)組。GET 是通過(guò) urldecode() 傳遞的。

$_POST:通過(guò) HTTP POST 方法傳遞給當(dāng)前腳本的變量的數(shù)組。

$_FILES:通過(guò) HTTP POST 方式上傳到當(dāng)前腳本的項(xiàng)目的數(shù)組。

$_REQUEST — HTTP Request 變量,以命令行方式運(yùn)行時(shí),將包含 argv 和 argc 信息;它們將存在于 $_SERVER數(shù)組。

由于 $_REQUEST 中的變量通過(guò) GET,POST 和 COOKIE 輸入機(jī)制傳遞給腳本文件,因此可以被遠(yuǎn)程用戶篡改而并不可信。這個(gè)數(shù)組的項(xiàng)目及其順序依賴于 PHP 的 variables_order 指令的配置。

$_SESSION:當(dāng)前腳本可用 SESSION 變量的數(shù)組。

move_uploaded_file() - 將上傳的文件移動(dòng)到新位置;import_request_variables() - 將 GET/POST/Cookie 變量導(dǎo)入到全局作用域中;session_start() - 啟動(dòng)新會(huì)話或者重用現(xiàn)有會(huì)話;getenv() - 獲取一個(gè)環(huán)境變量的值;

$_ENV:通過(guò)環(huán)境方式傳遞給當(dāng)前腳本的變量的數(shù)組。這些變量被從 PHP 解析器的運(yùn)行環(huán)境導(dǎo)入到 PHP 的全局命名空間。很多是由支持 PHP 運(yùn)行的 Shell 提供的,并且不同的系統(tǒng)很可能運(yùn)行著不同種類的 Shell,所以不可能有一份確定的列表。請(qǐng)查看你的 Shell 文檔來(lái)獲取定義的環(huán)境變量列表。其他環(huán)境變量包含了 CGI 變量,而不管 PHP 是以服務(wù)器模塊還是 CGI 處理器的方式運(yùn)行。

$_COOKIE:通過(guò) HTTP Cookies 方式傳遞給當(dāng)前腳本的變量的數(shù)組。setcookie() - Send a cookie

$php_errormsg — 前一個(gè)錯(cuò)誤信息;$php_errormsg 變量包含由 PHP 生成的最新錯(cuò)誤信息。這個(gè)變量只在錯(cuò)誤發(fā)生的作用域內(nèi)可用,并且要求 track_errors 配置項(xiàng)是開(kāi)啟的(默認(rèn)是關(guān)閉的)。如果用戶定義了錯(cuò)誤處理句柄(set_error_handler())并且返回 <code>FALSE 的時(shí)候,$php_errormsg 就會(huì)被設(shè)置。

<code><span><?php<br />@strpos();<br />echo $php_errormsg; //Wrong parameter count for strpos()<br />?></span>

$HTTP_RAW_POST_DATA — 原生POST數(shù)據(jù)。$HTTP_RAW_POST_DATA 包含 POST 提交的原始數(shù)據(jù)。參見(jiàn) always_populate_raw_post_data一般而言,使用 php://input代替 $HTTP_RAW_POST_DATA。

$http_response_header — HTTP 響應(yīng)頭:$http_response_header數(shù)組與 get_headers() 函數(shù)類似。當(dāng)使用HTTP 包裝器時(shí),$http_response_header 將會(huì)被 HTTP 響應(yīng)頭信息填充。$http_response_header 將被創(chuàng)建于局部作用域中。

<code><span><?php<br />function get_contents() {<br /> file_get_contents("http://example.com");<br /> var_dump($http_response_header);<br />}<br />get_contents();<br />var_dump($http_response_header);<br />?></span>

$argc — 傳遞給腳本的參數(shù)數(shù)目:包含當(dāng)運(yùn)行于命令行下時(shí)傳遞給當(dāng)前腳本的參數(shù)的數(shù)目。腳本的文件名總是作為參數(shù)傳遞給當(dāng)前腳本,因此 $argc 的最小值為 1。這個(gè)變量?jī)H在 register_argc_argv 打開(kāi)時(shí)可用。

$argv — 傳遞給腳本的參數(shù)數(shù)組:包含當(dāng)運(yùn)行于命令行下時(shí)傳遞給當(dāng)前腳本的參數(shù)的數(shù)組。第一個(gè)參數(shù)總是當(dāng)前腳本的文件名,因此 $argv[0] 就是腳本文件名。這個(gè)變量?jī)H在 register_argc_argv 打開(kāi)時(shí)可用。

  • getopt() - 從命令行參數(shù)列表中獲取選項(xiàng)
15.預(yù)定義異常

Exception是所有異常的基類。類摘要:

Exception { /* 屬性 */ protectedstring$message ; protectedint$code ; protectedstring$file ; protectedint$line ; /* 方法 */ public__construct ([ string<code>$message = "" [, int<code>$code = 0 [, Exception<code>$previous = <code>NULL ]]] ) finalpublicstringgetMessage ( void ) finalpublicExceptiongetPrevious ( void ) finalpublicintgetCode ( void ) finalpublicstringgetFile ( void ) finalpublicintgetLine ( void ) finalpublicarraygetTrace ( void ) finalpublicstringgetTraceAsString ( void ) publicstring__toString ( void ) finalprivatevoid__clone ( void ) } 屬性:message:異常消息內(nèi)容;code:異常代碼;file:拋出異常的文件名;line:拋出異常在該文件中的行號(hào)

Exception::__construct — 異常構(gòu)造函數(shù)

參數(shù):message:拋出的異常消息內(nèi)容。code:異常代碼。previous:異常鏈中的前一個(gè)異常。

Exception::getMessage — 獲取異常消息內(nèi)容

參數(shù):此函數(shù)沒(méi)有參數(shù)。

Exception::getPrevious — 返回異常鏈中的前一個(gè)異常

參數(shù):Exception::getPrevious — 返回異常鏈中的前一個(gè)異常。追蹤異常,并循環(huán)打印。 <code><span><?php<br />class MyCustomException extends Exception {}<br />function doStuff() {<br /> try {<br /> throw new InvalidArgumentException("You are doing it wrong!", 112);<br /> } catch(Exception $e) {<br /> throw new MyCustomException("Something happend", 911, $e);<br /> }<br />}<br />try {<br /> doStuff();<br /> } catch(Exception $e) {<br /> do {<br /> printf("%s:%d %s (%d) [%s]\n", $e->getFile(), $e->getLine(), $e->getMessage(), $e- >getCode(), get_class($e));<br /> } while($e = $e->getPrevious());<br /> }<br />?></span>

以上例程的輸出類似于:

<span>/home/bjori/ex.php:8 Something happend (911) [MyCustomException]
/home/bjori/ex.php:6 You are doing it wrong! (112) [InvalidArgumentException]
</span>

Exception::getCode — 獲取異常代碼

參數(shù):此函數(shù)沒(méi)有參數(shù)。

Exception::getFile — 獲取發(fā)生異常的程序文件名稱

參數(shù):此函數(shù)沒(méi)有參數(shù)。

Exception::getLine — 獲取發(fā)生異常的代碼在文件中的行號(hào)

參數(shù):此函數(shù)沒(méi)有參數(shù)。

Exception::getTrace — 獲取異常追蹤信息

參數(shù):此函數(shù)沒(méi)有參數(shù)。

Exception::getTraceAsString — 獲取字符串類型的異常追蹤信息

參數(shù):此函數(shù)沒(méi)有參數(shù)。

Exception::__toString — 將異常對(duì)象轉(zhuǎn)換為字符串

參數(shù):此函數(shù)沒(méi)有參數(shù)。

Exception::__clone — 異??寺?/span>

參數(shù):此函數(shù)沒(méi)有參數(shù)。沒(méi)有返回值,異常被不允許克隆。

ErrorException::__construct — 異常構(gòu)造函數(shù)

參數(shù):message:拋出的異常消息內(nèi)容。code:異常代碼。severity:異常的嚴(yán)重級(jí)別。filename:拋出異常所在的文件名。lineno:拋出異常所在的行號(hào)。previous:異常鏈中的前一個(gè)異常。

ErrorException::getSeverity — 獲取異常的嚴(yán)重程度

參數(shù):此函數(shù)沒(méi)有參數(shù)。 <code><span><?php<br />try {<br /> throw new ErrorException("Exception message", 0, 75);<br />} catch(ErrorException $e) {<br /> echo "This exception severity is: " . $e->getSeverity();<br />}<br />?></span> 16.預(yù)定義接口 Traversable(遍歷)接口:

檢測(cè)一個(gè)類是否可以使用 foreach 進(jìn)行遍歷的接口。無(wú)法被單獨(dú)實(shí)現(xiàn)的基本抽象接口。相反它必須由 IteratorAggregateIterator 接口實(shí)現(xiàn)。實(shí)現(xiàn)此接口的內(nèi)建類可以使用 foreach 進(jìn)行遍歷而無(wú)需實(shí)現(xiàn) IteratorAggregateIterator 接口。這是一個(gè)無(wú)法在 PHP 腳本中實(shí)現(xiàn)的內(nèi)部引擎接口。IteratorAggregateIterator 接口可以用來(lái)代替它。

Traversable { } 這個(gè)接口沒(méi)有任何方法,它的作用僅僅是作為所有可遍歷類的基本接口。 Iterator(迭代器)接口:

可在內(nèi)部迭代自己的外部迭代器或類的接口。

IteratorextendsTraversable { /* 方法 */ abstractpublicmixedcurrent ( void ) abstractpublicscalarkey ( void ) abstractpublicvoidnext ( void ) abstractpublicvoidrewind ( void ) abstractpublicbooleanvalid ( void ) }

Iterator::current — 返回當(dāng)前元素:沒(méi)有參數(shù),可返回任何類型。

Iterator::key — 返回當(dāng)前元素的鍵:沒(méi)有參數(shù),成功返回標(biāo)量,失敗則返回null。

Iterator::next — 向前移動(dòng)到下一個(gè)元素:沒(méi)有參數(shù),任何返回都將被忽略。此方法在 foreach 循環(huán)之后被調(diào)用。

Iterator::rewind — 返回到迭代器的第一個(gè)元素:當(dāng)開(kāi)始一個(gè) foreach 循環(huán)時(shí),這是第一個(gè)被調(diào)用的方法。它將會(huì)在 foreach 循環(huán)之后被調(diào)用。沒(méi)有參數(shù),任何返回都將被忽略。

Iterator::valid — 檢查當(dāng)前位置是否有效:此方法在 Iterator::rewind() 和 Iterator::next() 方法之后被調(diào)用以此用來(lái)檢查當(dāng)前位置是否有效。沒(méi)有參數(shù),返回將被轉(zhuǎn)換為布爾型。成功時(shí)返回 <code>TRUE, 或者在失敗時(shí)返回 <code>FALSE。

IteratorAggregate::getIterator — 獲取一個(gè)外部迭代器:沒(méi)有參數(shù),實(shí)現(xiàn)了 IteratorTraversable 接口的類的一個(gè)實(shí)例。

ArrayAccess(數(shù)組式訪問(wèn))接口:

提供像訪問(wèn)數(shù)組一樣訪問(wèn)對(duì)象的能力的接口。

ArrayAccess { /* 方法 */ abstractpublicbooleanoffsetExists ( mixed<code>$offset ) abstractpublicmixedoffsetGet ( mixed<code>$offset ) abstractpublicvoidoffsetSet ( mixed<code>$offset , mixed<code>$value ) abstractpublicvoidoffsetUnset ( mixed<code>$offset ) }

ArrayAccess::offsetExists — 檢查一個(gè)偏移位置是否存在:對(duì)一個(gè)實(shí)現(xiàn)了 ArrayAccess 接口的對(duì)象使用 isset() 或 empty() 時(shí),此方法將執(zhí)行。當(dāng)使用 empty() 并且僅當(dāng) ArrayAccess::offsetExists() 返回 <code>TRUE 時(shí),ArrayAccess::offsetGet() 將被調(diào)用以檢查是為否空。參數(shù):offset 需要檢查的偏移位置。成功時(shí)返回 <code>TRUE, 或者在失敗時(shí)返回 <code>FALSE。如果一個(gè)非布爾型返回值被返回,將被轉(zhuǎn)換為布爾型。

<code><span><?php<br />class obj implements arrayaccess {<br /> public function offsetSet($offset, $value) {<br /> var_dump(__METHOD__);<br />}<br />public function offsetExists($var) {<br /> var_dump(__METHOD__);<br /> if ($var == "foobar") {<br /> return true;<br /> }<br /> return false;<br />}<br />public function offsetUnset($var) {<br /> var_dump(__METHOD__);<br /> }<br />public function offsetGet($var) {<br /> var_dump(__METHOD__);<br /> return "value";<br /> }<br />}<br />$obj = new obj;<br />echo "Runs obj::offsetExists()\n";<br />var_dump(isset($obj["foobar"]));<br />echo "\nRuns obj::offsetExists() and obj::offsetGet()\n";<br />var_dump(empty($obj["foobar"]));<br />echo "\nRuns obj::offsetExists(), *not* obj:offsetGet() as there is nothing to get\n";<br />var_dump(empty($obj["foobaz"]));<br />?></span>

以上例程的輸出類似于:

<span>Runs obj::offsetExists()
string(17) "obj::offsetExists"
bool(true)

Runs obj::offsetExists() and obj::offsetGet()
string(17) "obj::offsetExists"
string(14) "obj::offsetGet"
bool(false)

Runs obj::offsetExists(), *not* obj:offsetGet() as there is nothing to get
string(17) "obj::offsetExists"
bool(true)
</span>

ArrayAccess::offsetGet?—?獲取一個(gè)偏移位置的值:當(dāng)檢查一個(gè)偏移位置是否為?empty()?時(shí),此方法被執(zhí)行。

參數(shù):offset 需要獲取的偏移位置。返回值:可返回任何類型。

ArrayAccess::offsetSet?—?設(shè)置一個(gè)偏移位置的值:參數(shù):offset?待設(shè)置的偏移位置。value?需要設(shè)置的值。沒(méi)有返回值。

如果另一個(gè)值不可用,那么?<code>offset?參數(shù)將被設(shè)置為?<code>NULL。

?

ArrayAccess::offsetUnset?—?復(fù)位一個(gè)偏移位置的值:當(dāng)使用?(unset)?進(jìn)行類型轉(zhuǎn)換時(shí),該方法不會(huì)被調(diào)用。

<code>參數(shù):offset?待復(fù)位的偏移位置。沒(méi)有返回值。

?

序列化接口:

?

Serializable::serialize?—?對(duì)象的字符串表示。這個(gè)方法擔(dān)當(dāng)著對(duì)象析構(gòu)器的角色。在此方法之后,__destruct()?方法將不會(huì)被調(diào)用。此函數(shù)沒(méi)有參數(shù),返回值:返回對(duì)象的字符串表示或者?<code>NULL?。

Serializable::unserialize?—?構(gòu)造對(duì)象。這個(gè)方法擔(dān)當(dāng)著對(duì)象構(gòu)造器的角色。在此方法之后,__construct()?將不會(huì)被調(diào)用。參數(shù):serialized?對(duì)象的字符串表示。

Closure::__construct?—?用于禁止實(shí)例化的構(gòu)造函數(shù)。這個(gè)方法僅用于禁止實(shí)例化一個(gè)?Closure?類的對(duì)象。這個(gè)類的對(duì)象的創(chuàng)建方法寫在?匿名函數(shù)?頁(yè)。此函數(shù)沒(méi)有參數(shù),沒(méi)有返回值。

Closure::bind?—?復(fù)制一個(gè)閉包,綁定指定的$this對(duì)象和類作用域。這個(gè)方法是?Closure::bindTo()?的靜態(tài)版本。

?

?

參數(shù):closure?需要綁定的匿名函數(shù)。newthis?需要綁定到匿名函數(shù)的對(duì)象,或者?<code>NULL?創(chuàng)建未綁定的閉包。newscope?想要綁定給閉包的類作用域,或者 'static' 表示不改變。如果傳入一個(gè)對(duì)象,則使用這個(gè)對(duì)象的類型名。 類作用域用來(lái)決定在閉包中 $this 對(duì)象的 私有、保護(hù)方法 的可見(jiàn)性。返回一個(gè)新的?Closure?對(duì)象 或者在失敗時(shí)返回?<code>FALSE

?

?

<code><span><?php <br />class?A?{<br>? ? private static?$sfoo?=?1;<br>? ? private?$ifoo?=?2;<br>}<br>$cl1?= static function() {<br>? ? return?A::$sfoo;<br>};<br>$cl2?= function() {<br>? ? return?$this->ifoo;<br>};<br>$bcl1?=?Closure::bind($cl1,?null,?'A');<br>$bcl2?=?Closure::bind($cl2, new?A(),?'A');<br>echo?$bcl1(),?"\n"; ? ?//1<br>echo?$bcl2(),?"\n"; ? ?//2<br>?></span>

Closure::bindTo?—?復(fù)制當(dāng)前閉包對(duì)象,綁定指定的$this對(duì)象和類作用域。創(chuàng)建并返回一個(gè)?匿名函數(shù), 它與當(dāng)前對(duì)象的函數(shù)體相同、綁定了同樣變量,但可以綁定不同的對(duì)象,也可以綁定新的類作用域。"綁定的對(duì)象"決定了函數(shù)體中的?$this的取值,"類作用域"代表一個(gè)類型、決定在這個(gè)匿名函數(shù)中能夠調(diào)用哪些 私有 和 保護(hù) 的方法。 也就是說(shuō),此時(shí) $this 可以調(diào)用的方法,與?<code>newscope?類的成員函數(shù)是相同的。靜態(tài)閉包不能有綁定的對(duì)象(?<code>newthis?參數(shù)的值應(yīng)該設(shè)為?<code>NULL)不過(guò)仍然可以用 bubdTo 方法來(lái)改變它們的類作用域。如果你只是想要復(fù)制一個(gè)匿名函數(shù),可以用?cloning?代替。

參數(shù):newthis?綁定給匿名函數(shù)的一個(gè)對(duì)象,或者?<code>NULL?來(lái)取消綁定。newscope?關(guān)聯(lián)到匿名函數(shù)的類作用域,或者 'static' 保持當(dāng)前狀態(tài)。如果是一個(gè)對(duì)象,則使用這個(gè)對(duì)象的類型為心得類作用域。 這會(huì)決定綁定的對(duì)象的 保護(hù)、私有成員 方法的可見(jiàn)性。返回值:返回新創(chuàng)建的?Closure?對(duì)象 或者在失敗時(shí)返回?<code>FALSE

?

?

<code><span><?php <br />class?A?{<br>? ? function?__construct($val) {<br>? ? ? ? $this->val?=?$val;<br>? ? }<br>? ? function?getClosure() {<br>? ? ? ? //returns closure bound to this object and scope<br>? ? ? ? return function() { return?$this->val; };<br>? ? }<br>}<br>$ob1?= new?A(1);<br>$ob2?= new?A(2);<br>$cl?=?$ob1->getClosure();<br>echo?$cl(),?"\n"; ? ?//1<br>$cl?=?$cl->bindTo($ob2);<br>echo?$cl(),?"\n"; ? ?//2<br>?></span> 17.上下文選項(xiàng)和參數(shù)

?

?

套接字上下文選項(xiàng)可用于所有工作在套接字上的封裝協(xié)議,像?tcp,?http?和?ftp.

<code><span><?php <br />// connect to the internet using the '192.168.0.100' IP<br>$opts?= array(<br>? ? 'socket'?=> array(<br>? ? 'bindto'?=>?'192.168.0.100:0',<br>? ? ),<br>);<br>// connect to the internet using the '192.168.0.100' IP and port '7000'<br>$opts?= array(<br>? ? 'socket'?=> array(<br>? ? 'bindto'?=>?'192.168.0.100:7000',<br>? ? ),<br>);<br>// connect to the internet using port '7000'<br>$opts?= array(<br>? ? 'socket'?=> array(<br>? ? 'bindto'?=>?'0:7000',<br>? ? ),<br>);<br>// create the context...<br>$context?=?stream_context_create($opts);<br>// ...and use it to fetch the data<br>echo?file_get_contents('http://www.example.com',?false,?$context);<br>?></span>

HTTP context 選項(xiàng)?—?HTTP context 的選項(xiàng)列表。提供給?http://?和?https://?傳輸協(xié)議的 context 選項(xiàng)。 transports.可選項(xiàng):

<code>methodstring?遠(yuǎn)程服務(wù)器支持的?<code>GET,<code>POST?或其它 HTTP 方法。默認(rèn)值是?<code>GET。
<code>headerstring?請(qǐng)求期間發(fā)送的額外 header 。在此選項(xiàng)的值將覆蓋其他值 (諸如?User-agent:,?Host:?和?Authentication:)。
<code>user_agentstring?要發(fā)送的 header?User-Agent:?的值。如果在上面的?header?context 選項(xiàng)中沒(méi)有指定 user-agent,此值將被使用。默認(rèn)使用?php.ini中設(shè)置的?user_agent。
<code>contentstring?在 header 后面要發(fā)送的額外數(shù)據(jù)。通常使用POST或PUT請(qǐng)求。
<code>proxystring?URI 指定的代理服務(wù)器的地址。(e.g.?tcp://proxy.example.com:5100).
<code>request_fulluriboolean?當(dāng)設(shè)置為?<code>TRUE?時(shí),在構(gòu)建請(qǐng)求時(shí)將使用整個(gè) URI 。(i.e.?GET http://www.example.com/path/to/file.html HTTP/1.0)。 雖然這是一個(gè)非標(biāo)準(zhǔn)的請(qǐng)求格式,但某些代理服務(wù)器需要它。默認(rèn)值是?<code>FALSE.
<code>follow_locationinteger?跟隨?Location?header 的重定向。設(shè)置為?0?以禁用。默認(rèn)值是?1。
<code>max_redirectsinteger?跟隨重定向的最大次數(shù)。值為?1?或更少則意味不跟隨重定向。默認(rèn)值是?20。
<code>protocol_versionfloat?HTTP 協(xié)議版本。默認(rèn)值是?1.0。PHP 5.3.0 以前的版本沒(méi)有實(shí)現(xiàn)分塊傳輸解碼。 如果此值設(shè)置為?1.1?,與?1.1?的兼容將是你的責(zé)任。
<code>timeoutfloat?讀取超時(shí)時(shí)間,單位為秒(s),用?float?指定(e.g.?10.5)。默認(rèn)使用?php.ini?中設(shè)置的?default_socket_timeout。
<code>ignore_errorsboolean?即使是故障狀態(tài)碼依然獲取內(nèi)容。默認(rèn)值為?<code>FALSE.

?

FTP context options?—?FTP context option listing

SSL 上下文選項(xiàng)?—?SSL 上下文選項(xiàng)清單。ssl://?和?tls://傳輸協(xié)議上下文選項(xiàng)清單??蛇x項(xiàng):好多。

CURL context options?—?CURL 上下文選項(xiàng)列表。CURL 上下文選項(xiàng)在?CURL?擴(kuò)展被編譯(通過(guò)?--with-curlwrappers?configure選項(xiàng))時(shí)可用??蛇x項(xiàng):

<code>methodstring?<code>GET,<code>POST,或者其他遠(yuǎn)程服務(wù)器支持的 HTTP 方法。默認(rèn)為?<code>GET.
<code>headerstring?額外的請(qǐng)求標(biāo)頭。這個(gè)值會(huì)覆蓋通過(guò)其他選項(xiàng)設(shè)定的值(如:?User-agent:,Host:, ,Authentication:)。
<code>user_agentstring?設(shè)置請(qǐng)求時(shí) User-Agent 標(biāo)頭的值。默認(rèn)為?php.ini?中的?user_agent設(shè)定。
<code>contentstring?在頭部之后發(fā)送的額外數(shù)據(jù)。這個(gè)選項(xiàng)在?<code>GET?和?<code>HEAD請(qǐng)求中不使用。
<code>proxystring?URI,用于指定代理服務(wù)器的地址(例如?tcp://proxy.example.com:5100)。
<code>max_redirectsinteger?最大重定向次數(shù)。1?或者更小則代表不會(huì)跟隨重定向。默認(rèn)為?20.
<code>curl_verify_ssl_hostboolean校驗(yàn)服務(wù)器。默認(rèn)為?<code>FALSE。這個(gè)選項(xiàng)在 HTTP 和 FTP 協(xié)議中均可使用。
<code>curl_verify_ssl_peerboolean?要求對(duì)使用的SSL證書(shū)進(jìn)行校驗(yàn)。默認(rèn)為?<code>FALSE。這個(gè)選項(xiàng)在 HTTP 和 FTP 協(xié)議中均可使用。獲取一個(gè)頁(yè)面,并以POST發(fā)送數(shù)據(jù):

?

<code><span><?php <br />$postdata?=?http_build_query(<br>? ? array(<br>? ? ? ? 'var1'?=>?'some content',<br>? ? ? ? 'var2'?=>?'doh'<br>? ? ? ? )<br>);<br>$opts?= array('http'?=><br>? ? array(<br>? ? ? ? 'method'?=>?'POST',<br>? ? ? ? 'header'?=>?'Content-type: application/x-www-form-urlencoded',<br>? ? ? ? 'content'?=>?$postdata<br>? ? ? ? )<br>);<br>$context?=?stream_context_create($opts);<br>$result?=?file_get_contents('http://example.com/submit.php',?false,?$context);<br>?></span>

Phar 上下文(context)選項(xiàng)?—?Phar 上下文(context)選項(xiàng)列表。phar://?封裝(wrapper)的上下文(context)選項(xiàng)。可選項(xiàng):<code>compressint?Phar compression constants?中的一個(gè)。<code>metadatamixed?Phar 元數(shù)據(jù)(metadata)。查看?Phar::setMetadata()。

Context 參數(shù)?—?Context 參數(shù)列表。這些參數(shù)(parameters)可以設(shè)置為由函數(shù)?stream_context_set_params()?返回的?context。參數(shù):<code>notificationcallable?當(dāng)一個(gè)流(stream)上發(fā)生事件時(shí),callable?將被調(diào)用。

18.支持的協(xié)議和封裝協(xié)議

?

?

file://?—?訪問(wèn)本地文件系統(tǒng)。文件系統(tǒng)?是 PHP 使用的默認(rèn)封裝協(xié)議,展現(xiàn)了本地文件系統(tǒng)。 當(dāng)指定了一個(gè)相對(duì)路徑(不以/、\、\\或 Windows 盤符開(kāi)頭的路徑)提供的路徑將基于當(dāng)前的工作目錄。 在很多情況下是腳本所在的目錄,除非被修改了。 使用 CLI 的時(shí)候,目錄默認(rèn)是腳本被調(diào)用時(shí)所在的目錄。

在某些函數(shù)里,例如?fopen()?和?file_get_contents(),?include_path?會(huì)可選地搜索,也作為相對(duì)的路徑。

?

?

封裝協(xié)議概要
屬性 支持
受 allow_url_fopen 影響 No
允許讀取 Yes
允許寫入 Yes
允許添加 Yes
允許同時(shí)讀和寫 Yes
支持 stat() Yes
支持 unlink() Yes
支持 rename() Yes
支持 mkdir() Yes
支持 rmdir() Yes

http://?--?https://?—?訪問(wèn) HTTP(s) 網(wǎng)址。允許通過(guò) HTTP 1.0 的 GET方法,以只讀訪問(wèn)文件或資源。? ?HTTP 請(qǐng)求會(huì)附帶一個(gè)?Host:?頭,用于兼容基于域名的虛擬主機(jī)。 如果在你的?php.ini?文件中或字節(jié)流上下文(context)配置了?user_agent?字符串,它也會(huì)被包含在請(qǐng)求之中。數(shù)據(jù)流允許讀取資源的?body,而 headers 則儲(chǔ)存在了?$http_response_header?變量里。

如果需要知道文檔資源來(lái)自哪個(gè) URL(經(jīng)過(guò)所有重定向的處理后), 需要處理數(shù)據(jù)流返回的系列響應(yīng)報(bào)頭(response headers)。

?

封裝協(xié)議概要
屬性 支持
受 allow_url_fopen 限制 Yes
允許讀取 Yes
允許寫入 No
允許添加 No
允許同時(shí)讀和寫 N/A
支持 stat() No
支持 unlink() No
支持 rename() No
支持 mkdir() No
支持 rmdir() No

ftp://?--?ftps://?—?訪問(wèn) FTP(s) URLs。允許通過(guò) FTP 讀取存在的文件,以及創(chuàng)建新文件。 如果服務(wù)器不支持被動(dòng)(passive)模式的 FTP,連接會(huì)失敗。

打開(kāi)文件后你既可以讀也可以寫,但是不能同時(shí)進(jìn)行。 當(dāng)遠(yuǎn)程文件已經(jīng)存在于 ftp 服務(wù)器上,如果嘗試打開(kāi)并寫入文件的時(shí)候, 未指定上下文(context)選項(xiàng)?overwrite,連接會(huì)失敗。 如果要通過(guò) FTP 覆蓋存在的文件, 指定上下文(context)的?overwrite?選項(xiàng)來(lái)打開(kāi)、寫入。 另外可使用 FTP 擴(kuò)展來(lái)代替。如果你設(shè)置了?php.ini?中的?from?指令, 這個(gè)值會(huì)作為匿名(anonymous)ftp 的密碼。

?

封裝協(xié)議概要
屬性 PHP 4 PHP 5
受 allow_url_fopen 影響 Yes Yes
允許讀取 Yes Yes
允許寫入 Yes (僅支持新文件) Yes (新文件/啟用?<code>overwrite?后已存在的文件)
允許添加 No Yes
允許同時(shí)讀和寫 No No
支持 stat() No 自 5.0.0 起:僅僅 filesize()、 filetype()、 file_exists()、 is_file() 和 is_dir()。 自 PHP 5.1.0 起: filemtime()。
支持 unlink() No Yes
支持 rename() No Yes
支持 mkdir() No Yes
支持 rmdir() No Yes

php://?—?訪問(wèn)各個(gè)輸入/輸出流(I/O streams)。PHP 提供了一些雜項(xiàng)輸入/輸出(IO)流,允許訪問(wèn) PHP 的輸入輸出流、標(biāo)準(zhǔn)輸入輸出和錯(cuò)誤描述符, 內(nèi)存中、磁盤備份的臨時(shí)文件流以及可以操作其他讀取寫入文件資源的過(guò)濾器。

php://stdin、php://stdout?和?php://stderr?允許直接訪問(wèn) PHP 進(jìn)程相應(yīng)的輸入或者輸出流。 數(shù)據(jù)流引用了復(fù)制的文件描述符,所以如果你打開(kāi)?php://stdin?并在之后關(guān)了它, 僅是關(guān)閉了復(fù)制品,真正被引用的?<code>STDIN?并不受影響。 注意 PHP 在這方面的行為有很多 BUG 直到 PHP 5.2.1。 推薦你簡(jiǎn)單使用常量?<code>STDIN、?<code>STDOUT?和?<code>STDERR?來(lái)代替手工打開(kāi)這些封裝器。

php://stdin?是只讀的,?php://stdout?和?php://stderr?是只寫的。

php://input?是個(gè)可以訪問(wèn)請(qǐng)求的原始數(shù)據(jù)的只讀流。 POST 請(qǐng)求的情況下,最好使用?php://input?來(lái)代替?$HTTP_RAW_POST_DATA,因?yàn)樗灰蕾囉谔囟ǖ?php.ini?指令。 而且,這樣的情況下?$HTTP_RAW_POST_DATA?默認(rèn)沒(méi)有填充, 比激活 always_populate_raw_post_data潛在需要更少的內(nèi)存。?enctype="multipart/form-data"?的時(shí)候?php://input?是無(wú)效的。

php://output?是一個(gè)只寫的數(shù)據(jù)流, 允許你以?print?和?echo?一樣的方式 寫入到輸出緩沖區(qū)。

php://fd?允許直接訪問(wèn)指定的文件描述符。 例如?php://fd/3?引用了文件描述符 3。

php://memory?和?php://temp?是一個(gè)類似文件 包裝器的數(shù)據(jù)流,允許讀寫臨時(shí)數(shù)據(jù)。 兩者的唯一區(qū)別是?php://memory?總是把數(shù)據(jù)儲(chǔ)存在內(nèi)存中, 而?php://temp?會(huì)在內(nèi)存量達(dá)到預(yù)定義的限制后(默認(rèn)是 2MB)存入臨時(shí)文件中。 臨時(shí)文件位置的決定和?sys_get_temp_dir()?的方式一致。php://temp?的內(nèi)存限制可通過(guò)添加?/maxmemory:NN來(lái)控制,NN?是以字節(jié)為單位、保留在內(nèi)存的最大數(shù)據(jù)量,超過(guò)則使用臨時(shí)文件。

php://filter?是一種元封裝器, 設(shè)計(jì)用于數(shù)據(jù)流打開(kāi)時(shí)的篩選過(guò)濾應(yīng)用。 這對(duì)于一體式(all-in-one)的文件函數(shù)非常有用,類似?readfile()、?file()?和?file_get_contents(), 在數(shù)據(jù)流內(nèi)容讀取之前沒(méi)有機(jī)會(huì)應(yīng)用其他過(guò)濾器。php://filter?目標(biāo)使用以下的參數(shù)作為它路徑的一部分。 復(fù)合過(guò)濾鏈能夠在一個(gè)路徑上指定。

封裝協(xié)議摘要(針對(duì)?php://filter,參考被篩選的封裝器。)
屬性 支持
首先于 allow_url_fopen No
首先于 allow_url_include 僅?php://input、?php://stdin、?php://memory?和?php://temp。
允許讀取 僅?php://stdin、?php://input、?php://fd、?php://memory?和?php://temp。
允許寫入 僅?php://stdout、?php://stderr、?php://output、?php://fd、?php://memory?和php://temp。
允許追加 僅?php://stdout、?php://stderr、?php://output、?php://fd、?php://memory?和php://temp(等于寫入)
允許同時(shí)讀寫 僅?php://fd、?php://memory?和?php://temp。
支持 stat() 僅?php://memory?和?php://temp。
支持 unlink() No
支持 rename() No
支持 mkdir() No
支持 rmdir() No
僅僅支持 stream_select() php://stdin、?php://stdout、?php://stderr、?php://fd?和?php://temp

zlib://?--?bzip2://?--?zip://?—?壓縮流。zlib:?PHP 4.0.4 - PHP 4.2.3(僅支持帶 fopencookie 的系統(tǒng))

compress.zlib://?和?compress.bzip2://?PHP 4.3.0 及以上

zlib:?的功能類似 gzopen(),但是 其數(shù)據(jù)流還能被 fread() 和其他文件系統(tǒng)函數(shù)使用。 自 PHP 4.3.0 后這個(gè)不建議被使用,因?yàn)闀?huì)和其他帶":"字符的文件名混淆; 請(qǐng)使用?compress.zlib://?作為替代。

compress.zlib://、?compress.bzip2://和 gzopen()、bzopen()是相等的。并且可以在不支持 fopencookie 的系統(tǒng)中使用。

ZIP 擴(kuò)展 注冊(cè)了?zip:?封裝協(xié)議??蛇x項(xiàng)

  • compress.zlib://file.gz
  • compress.bzip2://file.bz2
  • zip://archive.zip#dir/file.txt

data://?—?數(shù)據(jù)(RFC 2397)。用法:data://text/plain;base64,

封裝協(xié)議摘要
屬性 支持
受限于 allow_url_fopen No
受限于 allow_url_include Yes
允許讀取 Yes
允許寫入 No
允許追加 No
允許同時(shí)讀寫 No
支持 stat() No
支持 unlink() No
支持 rename() No
支持 mkdir() No
支持 rmdir() No

打印 data:// 的內(nèi)容:

<code><span><?php <br />// 打印 "I love PHP"<br>echo?file_get_contents('data://text/plain;base64,SSBsb3ZlIFBIUAo=');<br>?></span>

獲取媒體類型:

<code><span><?php <br />$fp?=?fopen('data://text/plain;base64,',?'r');<br>$meta?=?stream_get_meta_data($fp);<br>echo?$meta['mediatype']; ? ?// 打印 "text/plain"<br>?></span>

glob://?—?查找匹配的文件路徑模式。用法:glob://

封裝協(xié)議摘要
屬性 支持
受限于 allow_url_fopen No
受限于 allow_url_include No
允許讀取 No
允許寫入 No
允許附加 No
允許同時(shí)讀寫 No
支持 stat() No
支持 unlink() No
本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

為什么我們?cè)u(píng)論:PHP指南 為什么我們?cè)u(píng)論:PHP指南 Jul 15, 2025 am 02:48 AM

PHPhasthreecommentstyles://,#forsingle-lineand/.../formulti-line.Usecommentstoexplainwhycodeexists,notwhatitdoes.MarkTODO/FIXMEitemsanddisablecodetemporarilyduringdebugging.Avoidover-commentingsimplelogic.Writeconcise,grammaticallycorrectcommentsandu

如何在Windows上安裝PHP 如何在Windows上安裝PHP Jul 15, 2025 am 02:46 AM

安裝PHP在Windows上的關(guān)鍵步驟包括:1.下載合適的PHP版本并解壓,推薦使用ThreadSafe版本配合Apache或NonThreadSafe版本配合Nginx;2.配置php.ini文件,將php.ini-development或php.ini-production重命名為php.ini;3.將PHP路徑添加到系統(tǒng)環(huán)境變量Path中以便命令行使用;4.測(cè)試PHP是否安裝成功,通過(guò)命令行執(zhí)行php-v和運(yùn)行內(nèi)置服務(wù)器測(cè)試解析能力;5.若使用Apache,需在httpd.conf中配置P

PHP語(yǔ)法:基礎(chǔ)知識(shí) PHP語(yǔ)法:基礎(chǔ)知識(shí) Jul 15, 2025 am 02:46 AM

PHP的基礎(chǔ)語(yǔ)法包括四個(gè)關(guān)鍵點(diǎn):1.PHP標(biāo)簽必須使用結(jié)束,推薦使用完整標(biāo)簽;2.輸出內(nèi)容常用echo和print,其中echo支持多參數(shù)且效率更高;3.注釋方式有//、#和//,用于提升代碼可讀性;4.每條語(yǔ)句必須以分號(hào)結(jié)尾,空格和換行不影響執(zhí)行但影響可讀性。掌握這些基本規(guī)則有助于寫出清晰穩(wěn)定的PHP代碼。

您的第一個(gè)PHP腳本:實(shí)用介紹 您的第一個(gè)PHP腳本:實(shí)用介紹 Jul 16, 2025 am 03:42 AM

如何開(kāi)始編寫第一個(gè)PHP腳本?首先設(shè)置本地開(kāi)發(fā)環(huán)境,安裝XAMPP/MAMP/LAMP,使用文本編輯器,了解服務(wù)器運(yùn)行原理。其次,創(chuàng)建一個(gè)名為hello.php的文件,輸入基本代碼并運(yùn)行測(cè)試。第三,學(xué)習(xí)混合使用PHP與HTML以實(shí)現(xiàn)動(dòng)態(tài)內(nèi)容輸出。最后,注意常見(jiàn)錯(cuò)誤如缺少分號(hào)、引用問(wèn)題及文件擴(kuò)展名錯(cuò)誤,并開(kāi)啟錯(cuò)誤報(bào)告以便調(diào)試。

什么是PHP,它是用什么? 什么是PHP,它是用什么? Jul 16, 2025 am 03:45 AM

PHPisaserver-sidescriptinglanguageusedforwebdevelopment,especiallyfordynamicwebsitesandCMSplatformslikeWordPress.Itrunsontheserver,processesdata,interactswithdatabases,andsendsHTMLtobrowsers.Commonusesincludeuserauthentication,e-commerceplatforms,for

您如何處理PHP中的文件操作(閱讀/寫作)? 您如何處理PHP中的文件操作(閱讀/寫作)? Jul 16, 2025 am 03:48 AM

tohandlefileoperationsinphp,useApprepreprunctions andModes.1.toreadafile,usefile_get_contents()forsmallfilesorfgets()inaloopforline by line-line-processing.2.towriteToafile,usefile_put_cte_contents(usefile_contents)(

PHP 8安裝指南 PHP 8安裝指南 Jul 16, 2025 am 03:41 AM

在Ubuntu上安裝PHP8的步驟為:1.更新軟件包列表;2.安裝PHP8及基礎(chǔ)組件;3.檢查版本確認(rèn)安裝成功;4.按需安裝額外模塊。Windows用戶可下載ZIP包并解壓,隨后修改配置文件、啟用擴(kuò)展并將路徑加入環(huán)境變量。macOS用戶推薦使用Homebrew安裝,依次執(zhí)行添加tap、安裝PHP8、設(shè)置默認(rèn)版本及驗(yàn)證版本等步驟。不同系統(tǒng)下安裝方式雖有差異,但流程清晰,根據(jù)用途選對(duì)方法即可。

python如果還有示例 python如果還有示例 Jul 15, 2025 am 02:55 AM

寫Python的ifelse語(yǔ)句關(guān)鍵在于理解邏輯結(jié)構(gòu)與細(xì)節(jié)。1.基礎(chǔ)結(jié)構(gòu)是if條件成立執(zhí)行一段代碼,否則執(zhí)行else部分,else可選;2.多條件判斷用elif實(shí)現(xiàn),順序執(zhí)行且一旦滿足即停止;3.嵌套if用于進(jìn)一步細(xì)分判斷,建議不超過(guò)兩層;4.簡(jiǎn)潔場(chǎng)景可用三元表達(dá)式替代簡(jiǎn)單ifelse。注意縮進(jìn)、條件順序及邏輯完整性,才能寫出清晰穩(wěn)定的判斷代碼。

See all articles