検索
ホームページバックエンド開発PHPチュートリアルPHP中国語マニュアル2、PHPチュートリアル

PHP中国語マニュアル2、PHPチュートリアル

Jul 13, 2016 am 09:44 AM
php中国語世代使用する内蔵できる対処する異常なマニュアル拡大するユーザー親切カスタマイズ

PHP中国語マニュアル2、

<code><code> 11.例外処理 <code><code>

ユーザーは、PHP の組み込み例外処理クラスをカスタム例外処理クラスで拡張できます。次のコードは、組み込み例外処理クラスのどのプロパティとメソッドがサブクラスでアクセス可能で継承可能であるかを示しています。翻訳者注: 次のコードは、組み込みの例外処理クラスの構造を説明するためだけのものであり、実際的な意味を持つ使用可能なコードではありません。

<code><?php <br />class Exception{<br>protected $message = 'Unknown exception'; // 异常信息<br>protected $code = 0; // 用户自定义异常代码<br>protected $file; // 发生异常的文件名<br>protected $line; // 发生异常的代码行号<br>function __construct($message = null, $code = 0);<br>final function getMessage(); // 返回异常信息<br>final function getCode(); // 返回异常代码<br>final function getFile(); // 返回发生异常的文件名<br>final function getLine(); // 返回发生异常的代码行号<br>final function getTrace(); // backtrace() 数组<br>final function getTraceAsString(); // 已格成化成字符串的 getTrace() 信息<br>/* 可重载的方法 */<br>function __toString(); // 可输出的字符串<br>}<br>?>

カスタム クラスを使用して組み込み例外処理クラスを拡張し、コンストラクターを再定義する場合は、同時にparent::__construct()を呼び出して、すべての変数に値が割り当てられているかどうかを確認することをお勧めします。オブジェクトが文字列を出力したい場合は、__toString() をオーバーロードして出力スタイルをカスタマイズできます。

PHPの組み込み例外処理クラスを拡張します

<code><?php <br />// 自定义一个异常处理类<br>class MyException extends Exception{    // 重定义构造器使 message 变为必须被指定的属性<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 exceptionn";<br>    }<br>}<br><span>//</span>创建一个用于测试异常处理机制的类<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>// 抛出默认的异常<br>throw new Exception('2 isnt allowed as a parameter', 6);<br>break;<br>default:<br>// 没有异常的情况下,创建一个对象<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 exceptionn", $e;<br>$e->customFunction();<br>} catch (Exception $e) { // 被忽略<br>echo "Caught Default Exceptionn", $e;<br>}<br>// 执行后续代码<br>var_dump($o);<br>echo "nn";<br>// 例子 2<br>try {<br>$o = new TestException(TestException::THROW_DEFAULT);<br>} catch (MyException $e) { // 不能匹配异常的种类,被忽略<br>echo "Caught my exceptionn", $e;<br>$e->customFunction();<br>} catch (Exception $e) { // 捕获异常<br>echo "Caught Default Exceptionn", $e;<br>}<br>// 执行后续代码<br>var_dump($o);<br>echo "nn";<br>// 例子 3<br>try {<br>$o = new TestException(TestException::THROW_CUSTOM);<br>} catch (Exception $e) { // 捕获异常<br>echo "Default Exception caughtn", $e;<br>}<br>// 执行后续代码<br>var_dump($o);<br>echo "nn";<br>// 例子 4<br>try {<br>$o = new TestException();<br>} catch (Exception $e) { // 没有异常,被忽略<br>echo "Default Exception caughtn", $e;<br>}<br>// 执行后续代码<br>var_dump($o);<br>echo "nn";<br>?> 12.ジェネレーター <code><code>

ジェネレーターを使用すると、メモリ内に配列を作成せずに foreach ブロックにコードを記述して、一連のデータを反復処理できます。これにより、メモリの制限に達したり、かなりの処理時間がかかってしまいます。代わりに、通常のカスタム関数と同じようにジェネレーター関数を作成できます。通常の関数が 1 回だけ返すのではなく、ジェネレーターは反復する必要がある値を生成するために必要なだけ何度でも生成できます。

<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>?> リーリー

ジェネレーターとIterator オブジェクトの比較

ジェネレーターの主な利点はそのシンプルさです。 Iterator クラスを実装する場合に比べて、記述する必要のある定型コードがはるかに少なくなり、コードは一般にはるかに読みやすくなります。たとえば、次の関数とクラスは同等です:

<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> 指向了同一个变量。<var><var>$a</var></var> 和 <var><var>$b</var></var> 在这里是完全相同的,这并不是 <var><var>$a</var></var> 指向了 <var><var>$b</var></var> 或者·            //相反,而是 <var><var>$a</var></var> 和 <var><var>$b</var></var> 指向了同一个地方。<br>?> <code>

参照を持つ配列がコピーされた場合、その値は逆参照されません。配列値を関数に渡す場合も同様です。未定義の変数が参照によって割り当てられた場合、参照によって渡された場合、または参照によって返された場合、その変数は自動的に作成されます。

関数 foo(&$var) { }

foo($a); // $a が「作成」され、null に割り当てられます

$b = array();

foo($b['b']);

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

;

$c = 新しい StdClass;

foo($c->d);

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

;

?>

同じ構文は、参照を返す関数と new 演算子 (PHP 4.0.4 以降) で使用できます。 <code>$bar =& new fooclass();
$foo =& find_var($bar);
?>

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

関数内で global として宣言された変数に参照が割り当てられている場合、その参照は関数内でのみ表示されます。これは $GLOBALS 配列を使用することで回避できます。関数内でグローバル変数を参照: <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;$var =& $GLOBALS['var']; の省略形として扱います。したがって、他の参照を $var に代入しても、ローカル変数の参照が変更されるだけです。

foreach ステートメントで参照を含む変数に値を代入すると、参照されるオブジェクトも変更されます。

$ref = 0;

$row =& $ref;

foreach (array(1, 2, 3) as $row) {// 何かをする}

echo $ref; // 3 - 反復配列の最後の要素

?>

参照が行う 2 番目のことは、参照によって変数を渡すことです。これは、関数内にローカル変数を作成し、その変数が呼び出しスコープ内の同じコンテンツを参照することによって実現されます。例: <code>

function foo(&$var){
$var++;
}
$a=5;
foo($a) ;
?><code><span><?php <br />function foo(&$var){<br>    $var++;<br>}<br>$a=5;<br>foo($a);<br>?></span> をすると$aが6になります。これは、foo関数の変数$var$aと同じ内容を指しているためです。詳細な説明については、「参照による受け渡し」を参照してください。 参照が行う 3 番目のことは、参照を返すことです。参照はポインタではありません。

関数がその引数の値を変更できるように、参照によって変数を関数に渡すことができます。

<code><code>function foo(&$var){
$var++;
}
$a=5;
foo($a);// $a is 6 here
?>
function foo(&$var){
$var++;
}
$a=5;
foo($a) ;// ここで $a は 6 です
?> 関数呼び出しには参照シンボルはなく、関数定義のみにあることに注意してください。パラメーターを参照によって正しく渡すには、関数定義だけで十分です

以下は参照によって渡すことができます:

変数 (例: foo($a); 新しいステートメント (例: foo(new foobar())); 関数から返される参照

他の式は参照渡しできず、結果は未定義です。

<code><span><?php <br />function bar(){ // Note the missing &<br>$a = 5;<br>return $a;<br>}<br>foo(bar()); // 自 PHP 5.0.5 起导致致命错误<br>foo($a = 5) // 表达式,不是变量<br>foo(5) // 导致致命错误<br>?></span> <code><p><?php <br />function bar(){ // &<br>$a = 5;<br>return $a;<br>}<br>foo が欠落していることに注意してください(bar()); // PHP 5.0.5 以降では致命的なエラーが発生します<br>foo($a = 5) // 変数ではなく式<br>foo(5) // 致命的なエラーが発生します<br> ?><span></span></p> Reference return は、関数を使用して参照をバインドする必要がある変数を見つけたい場合に使用します。パフォーマンスを向上させるためにリターン参照を使用しないでください。エンジンはそれ自体を最適化するのに十分な賢さを備えています。正当な技術的理由がある場合にのみ参照を返してください。参照を返すには、次の構文を使用します: 🎜<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関数によって返されるオブジェクトのプロパティには、参照構文がない場合と同様に、コピーされるのではなく値が割り当てられます。パラメーターの受け渡しとは異なり、ここでは両方の場所でアンパサンドを使用する必要があります。これは、通常のコピーではなく参照が返されることを示し、また $myValue が通常の代入ではなく参照としてバインドされていることを示します。参照の設定を解除すると、変数名と変数の内容の間のバインドが解除されるだけです。これは、変数の内容が破壊されることを意味するものではありません。 <code><code>$a = 1;
$b =& $a;
unset($a);
?>
$a = 1;
$b =& $a;
unset($a);
?> $bの設定を解除せず、$aだけを解除します。基準位置: グローバル参照: global $var で変数を宣言すると、グローバル変数への参照が実際に確立されます。それはこれを行うのと同じです: <code><span><?php <br />$var =& $GLOBALS["var"];    //这意味着,例如,unset <var><var>$var</var></var> 不会 unset 全局变量。<br>?></span> <code><span><?php <br />$var =& $GLOBALS["var"]; //これは、たとえば、unset <var><var>$var</var></var> はグローバル変数の設定を解除しないことを意味します。 <br>?></span>

$this: オブジェクトのメソッドでは、$this は常に、それを呼び出すオブジェクトへの参照です。

14. 事前定義された変数

スーパーグローバル変数 - スーパーグローバル変数は、すべてのスコープで常に使用できる組み込み変数です。PHP の多くの事前定義変数は「スーパーグローバル」です。つまり、スクリプトのすべてのスコープで使用できます。

global $variable; を実行せずに、関数またはメソッド内でアクセスできます。これらのスーパーグローバル変数は次のとおりです:

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

デフォルトでは、すべてのスーパーグローバル変数が使用可能です。ただし、この可用性に影響を与えるディレクティブがいくつかあります。 <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>

$GLOBALS — グローバル スコープで使用可能なすべての変数を参照します。すべての変数を含むグローバル結合配列。変数の名前は配列のキーです。 <code><var><?php <br />function test() {<br>$foo = "ローカル変数";<br>エコー '$foo をグローバル スコープで: ' . $GLOBALS["foo"] . "n";// グローバル スコープの $foo: 例の内容<br>エコー '現在のスコープの $foo: ' . "n";// 現在のスコープの $foo: ローカル変数<br> }<br>$foo = "コンテンツの例";<br>test();<br>?></var> 「スーパーグローバル」はオートメーションのグローバル変数とも呼ばれます。これは、スクリプトのすべてのスコープで使用できることを意味します。関数またはメソッド内で

global $variable;

を使用してアクセスする必要はありません。他のすべてのスーパーグローバル変数とは異なり、$GLOBALS は PHP で常に使用できます。

$_SERVER

は、ヘッダー、パス、スクリプトの場所などの情報を含む配列です。この配列内の項目は で表されます

Webサーバーの作成。 $_SERVER で次の要素が見つかる場合と見つからない場合があります。リスト:

'PHP_SELF': ドキュメントルートに関連する、現在実行中のスクリプトのファイル名。たとえば、http://example.com/test.php/foo.bar のスクリプトで を使用します。

$_SERVER['PHP_SELF'] は /test.php/foo.bar を取得します。

'SERVER_ADDR': スクリプトが現在実行されているサーバーの IP アドレス。

'SERVER_NAME': スクリプトが現在実行されているサーバーのホスト名。スクリプトが仮想ホスト上で実行されている場合、名前はその仮想ホストに設定された値によって決まります。

'SERVER_PROTOCOL': ページをリクエストするときの通信プロトコルの名前とバージョン。たとえば、「HTTP/1.0」です。

🎜'REQUEST_METHOD': ページへのアクセスに使用されるリクエスト メソッド。たとえば、「GET」、「HEAD」、「POST」、「PUT」。 🎜🎜 🎜🎜'REQUEST_TIME': リクエストが開始されたときのタイムスタンプ。 PHP 5.1.0 以降で利用可能です。 🎜🎜

'QUERY_STRING': ページアクセスが実行されるクエリ文字列 (クエリ文字列) (存在する場合)。

'HTTP_HOST': 現在のリクエスト ヘッダー内の Host: 項目の内容 (存在する場合)。

'HTTP_REFERER': ユーザー エージェントを現在のページの前のページのアドレス (存在する場合) に誘導します。ユーザーエージェント設定によって決定されます。すべてのユーザーエージェントがこの項目を設定するわけではなく、一部のユーザーエージェントは HTTP_REFERER を変更する機能も提供します。要するに、その値は信頼できません。

'HTTP_USER_AGENT': 現在のリクエスト ヘッダー内の User-Agent: 項目の内容 (存在する場合)。この文字列は、このページにアクセスするユーザー エージェントに関する情報を示します。

'REMOTE_ADDR': 現在のページを閲覧しているユーザーの IP アドレス。

'REMOTE_HOST': 現在のページを閲覧しているユーザーのホスト名。 DNS 逆引き解決は、ユーザーの REMOTE_ADDR には依存しません。

'SERVER_PORT': Web サーバーによって使用されるポート。デフォルト値は「80」です。 SSL セキュア接続を使用する場合、この値はユーザーが設定した HTTP ポートです。

$_GET: URL パラメーターを介して現在のスクリプトに渡される変数の配列。 GET は urldecode() 経由で渡されます。

$_POST: HTTP POST メソッド経由で現在のスクリプトに渡される変数の配列。

$_FILES: HTTP POST 経由で現在のスクリプトにアップロードされたプロジェクトの配列。

$_REQUEST — HTTP リクエスト変数は、コマンドライン モードで実行する場合、 argv および argc 情報を含まず、$_SERVER 配列に存在します。

$_REQUEST の変数は GET、POST、COOKIE 入力メカニズムを通じてスクリプト ファイルに渡されるため、リモート ユーザーによって改ざんされる可能性があり、信頼できません。この配列の項目とその順序は、PHP の variables_order ディレクティブの構成によって異なります。

$_SESSION: 現在のスクリプトで使用できる SESSION 変数の配列。

move_uploaded_file() - アップロードされたファイルを新しい場所に移動します; import_request_variables() - GET/POST/Cookie 変数をグローバル スコープにインポートします; session_start() - 新しいセッションを開始するか、既存のセッションを再利用します。環境変数の値

$_ENV: 環境を通じて現在のスクリプトに渡される変数の配列。これらの変数は、PHP パーサーのランタイム環境から PHP のグローバル名前空間にインポートされます。多くは PHP の実行をサポートするシェルによって提供されており、異なるシステムでは異なる種類のシェルが実行される可能性があるため、明確なリストは不可能です。定義された環境変数のリストについては、シェルのドキュメントを確認してください。他の環境変数には、PHP がサーバー モジュールとして実行されているか CGI プロセッサとして実行されているかに関係なく、CGI 変数が含まれます。

$_COOKIE: HTTP Cookie を通じて現在のスクリプトに渡される変数の配列。 setcookie() - Cookie を送信します

$php_errormsg — 以前のエラー メッセージ。$php_errormsg 変数には、PHP によって生成された最新のエラー メッセージが含まれます。この変数は、エラーが発生したスコープでのみ使用でき、track_errors 構成項目をオンにする必要があります (デフォルトではオフになっています)。ユーザーがエラーハンドラー (set_error_handler()) を定義して <code>FALSE を返すと、$php_errormsg が設定されます。

<code><code>@strpos();
echo $php_errormsg;    //Wrong parameter count for strpos()
?>
@strpos();
echo $php_errormsg; //strpos() のパラメータ数が間違っています
?>

$HTTP_RAW_POST_DATA — 生の POST データ。 $HTTP_RAW_POST_DATA POST によって送信された生データが含まれます。 always_populate_raw_post_data を参照してください。 通常、$HTTP_RAW_POST_DATA の代わりに php://input を使用します。

$http_response_header — HTTP 応答ヘッダー: $http_response_header この配列は get_headers() 関数に似ています。 HTTP ラッパーを使用する場合、$http_response_header には HTTP 応答ヘッダーが設定されます。 $http_response_headerはローカルスコープに作成されます。

🎜 <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 — 传递给脚本的参数数目:包含当运行于命令行下时传递给当前脚本的参数的数目。脚本的文件名总是作为参数传递给当前脚本,因此 $argc 的最小值为 1。这个变量仅在 register_argc_argv 打开时可用。

$argv — 传递给脚本的参数数组:包含当运行于命令行下时传递给当前脚本的参数的数组。第一个参数总是当前脚本的文件名,因此 $argv[0] 就是脚本文件名。这个变量仅在 register_argc_argv 打开时可用。

  • getopt() - 从命令行参数列表中获取选项
15.预定义异常

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:异常消息内容;code:异常代码;file:抛出异常的文件名;line:抛出异常在该文件中的行号

Exception::__construct — 异常构造函数

参数:message:抛出的异常消息内容。code:异常代码。previous:异常链中的前一个异常。

Exception::getMessage — 获取异常消息内容

参数:此函数没有参数。

Exception::getPrevious — 返回异常链中的前一个异常

参数:Exception::getPrevious — 返回异常链中的前一个异常。追踪异常,并循环打印。 <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 — 获取异常代码

参数:此函数没有参数。

Exception::getFile — 获取发生异常的程序文件名称

参数:此函数没有参数。

Exception::getLine — 获取发生异常的代码在文件中的行号

パラメータ: この関数にはパラメータがありません。

Exception::getTrace — 例外追跡情報を取得する

パラメータ: この関数にはパラメータがありません。

Exception::getTraceAsString — 文字列型の例外トレース情報を取得する

パラメータ: この関数にはパラメータがありません。

Exception::__toString — 例外オブジェクトを文字列に変換する

パラメータ: この関数にはパラメータがありません。

Exception::__clone — 例外クローン

パラメータ: この関数にはパラメータがありません。戻り値はなく、例外を複製することはできません。

ErrorException::__construct — 例外コンストラクター

パラメータ: message: スローされた例外メッセージの内容。コード: 例外コード。 severity: 例外の重大度レベル。 filename: 例外がスローされたファイル名。 lineno: 例外がスローされた行番号。前: 例外チェーン内の前の例外。

ErrorException::getSeverity — 例外の重大度を取得する

パラメータ: この関数にはパラメータがありません。 <code><code>try {
    throw new ErrorException("Exception message", 0, 75);
} catch(ErrorException $e) {
    echo "This exception severity is: " . $e->getSeverity();
}
?>
try {
throw new ErrorException("例外メッセージ", 0, 75);
} catch(ErrorException $e) {
echo "この例外の重大度は次のとおりです。「 . $e->getSeverity();
}
?> 16. 定義済みインターフェース トラバース可能なインターフェイス:

foreach を使用してクラスを横断できるかどうかを検出するインターフェイス。単独では実装できない基本的な抽象インターフェイス。代わりに、IteratorAggregate または Iterator インターフェースによって実装する必要があります。このインターフェースを実装する組み込みクラスは、IteratorAggregate または Iterator インターフェースを実装せずに、反復に foreach を使用できます。これは、PHP スクリプトでは実装できない内部エンジン インターフェイスです。 IteratorAggregate または Iterator インターフェイスを代わりに使用できます。

Traversable { } このインターフェースにはメソッドはなく、その役割はすべての走査可能なクラスの基本インターフェースとしてのみです。 イテレータインターフェース:

独自の外部イテレータまたはクラスのインターフェイスを使用して内部的に反復処理できます。

IteratorextendsTraversable { /* メソッド */ 抽象公開混合現在 (無効) abstractpublicscalarkey (void) abstractpublicvoidnext (ボイド) abstractpublicvoidrewind (void) abstractpublicbooleanvalid (void) }

Iterator::current — 現在の要素を返します。パラメータはなく、任意の型を返すことができます。

Iterator::key — 現在の要素のキーを返します。パラメータはありません。成功した場合はスカラーを返し、失敗した場合は null を返します。

Iterator::next — 次の要素に進みます。パラメーターはありません。戻り値は無視されます。このメソッドは、foreach ループ の後に と呼ばれます。

Iterator::rewind — イテレータの最初の要素を返します。これは、foreach ループの開始時に呼び出される first メソッドです。 foreach ループの後では呼び出されません。パラメーターがないと、戻り値は無視されます。

Iterator::valid — 現在位置が有効かどうかを確認する: このメソッドは、Iterator::rewind() メソッドと Iterator::next() メソッドの後に呼び出され、現在位置が有効かどうかを確認します。パラメータがない場合、戻り値はブール値に変換されます。成功した場合は <code>TRUE<code>TRUE, 或者在失败时返回 <code>FALSE を返し、失敗した場合は <code>FALSE を返します。

IteratorAggregate::getIterator — 外部イテレーターを取得します。パラメーターはありません。Iterator または Traversable インターフェイスを実装するクラスのインスタンスです。

ArrayAccess (配列アクセス) インターフェイス:

配列などのオブジェクトにアクセスする機能を提供するインターフェイス。

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

ArrayAccess::offsetExists — 检查一个偏移位置是否存在:对一个实现了 ArrayAccess 接口的对象使用 isset() 或 empty() 时,此方法将执行。当使用 empty() 并且仅当 ArrayAccess::offsetExists() 返回 <code>TRUE 时,ArrayAccess::offsetGet() 将被调用以检查是为否空。参数:offset 需要检查的偏移位置。成功时返回 <code>TRUE, 或者在失败时返回 <code>FALSE。如果一个非布尔型返回值被返回,将被转换为布尔型。

<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 — 获取一个偏移位置的值:当检查一个偏移位置是否为 empty() 时,此方法被执行。

参数:offset 需要获取的偏移位置。返回值:可返回任何类型。

ArrayAccess::offsetSet — 设置一个偏移位置的值:参数:offset 待设置的偏移位置。value 需要设置的值。没有返回值。

如果另一个值不可用,那么 <code>offset 参数将被设置为 <code>NULL。

 

ArrayAccess::offsetUnset — 复位一个偏移位置的值:当使用 (unset) 进行类型转换时,该方法不会被调用。

<code>参数:offset 待复位的偏移位置。没有返回值。

 

序列化接口:

 

Serializable::serialize — 对象的字符串表示。这个方法担当着对象析构器的角色。在此方法之后,__destruct() 方法将不会被调用。此函数没有参数,返回值:返回对象的字符串表示或者 <code>NULL 。

Serializable::unserialize — 构造对象。这个方法担当着对象构造器的角色。在此方法之后,__construct() 将不会被调用。参数:serialized 对象的字符串表示。

Closure::__construct — 用于禁止实例化的构造函数。这个方法仅用于禁止实例化一个 Closure 类的对象。这个类的对象的创建方法写在 匿名函数 页。此函数没有参数,没有返回值。

Closure::bind — 复制一个闭包,绑定指定的$this对象和类作用域。这个方法是 Closure::bindTo() 的静态版本。

 

 

パラメータ:クロージャー バインドする必要がある匿名関数。 newthis には、匿名関数にバインドされたオブジェクトが必要です。そうでない場合は、<code>NULL<code>NULL 创建未绑定的闭包。newscope 想要绑定给闭包的类作用域,或者 'static' 表示不改变。如果传入一个对象,则使用这个对象的类型名。 类作用域用来决定在闭包中 $this 对象的 私有、保护方法 的可见性。返回一个新的 Closure 对象 或者在失败时返回 <code>FALSE 非バインド クロージャが作成されます。 newscope は、クロージャにバインドするクラス スコープです。または、「static」は変更されていないことを意味します。オブジェクトが渡された場合は、オブジェクトの型名が使用されます。 クラス スコープは、クロージャ内の $this オブジェクトのプライベートな保護されたメソッドの可視性を決定するために使用されます。新しい Closure オブジェクトを返すか、失敗した場合は <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> <code><p><?php <br />クラス A {<br> プライベート $sfoo = 1;<br> プライベート $ifoo = 2;<br>}<br>$cl1 = 静的関数 ( ) {<br> return A::$sfoo;<br>};<br>$cl2 = function() {<br> return $this->ifoo;<br>};$bcl1 = Closure::bind($cl1, null, 'A');<br>$bcl2 = Closure::bind($cl2, new A(), 'A');<br> エコー$bcl1(), "n"; //1<br>エコー $bcl2(), //2<br>?><span></span></p>; Closure::bindTo — 現在のクロージャ オブジェクトをコピーし、指定された $this オブジェクトとクラス スコープをバインドします。匿名関数を作成して返します。この関数は、現在のオブジェクトと同じ関数本体を持ち、同じ変数をバインドしますが、異なるオブジェクトまたは新しいクラス スコープをバインドできます。 「バインドされたオブジェクト」は関数本体の <code>newscope 类的成员函数是相同的。静态闭包不能有绑定的对象( <code>newthis 参数的值应该设为 <code>NULL$this の値を決定し、「クラス スコープ」は型を表し、この匿名関数でどのプライベート メソッドとプロテクト メソッドを呼び出すことができるかを決定します。 つまり、現時点で $this が呼び出すことができるメソッドは、<code>newscope クラスのメンバー関数と同じです。静的クロージャはバインドされたオブジェクトを持つことができません (<code>newthis パラメータの値は <code>NULL に設定する必要があります) が、bubdTo メソッドを使用してクラス スコープを変更できます。匿名関数をコピーしたいだけの場合は、代わりにクローン作成を使用できます。 <code>NULL 来取消绑定。newscope 关联到匿名函数的类作用域,或者 'static' 保持当前状态。如果是一个对象,则使用这个对象的类型为心得类作用域。 这会决定绑定的对象的 保护、私有成员 方法的可见性。返回值:返回新创建的 Closure 对象 或者在失败时返回 <code>FALSEパラメータ: newthis は匿名関数にバインドされたオブジェクト、またはバインドを解除するには <code>NULL です。 newscope は匿名関数のクラス スコープに関連付けられます。または、「static」は現在の状態を維持します。それがオブジェクトの場合、このオブジェクトのタイプはエクスペリエンス クラスのスコープで使用されます。 これにより、バインドされたオブジェクトの保護されたプライベート メンバー メソッドの可視性が決まります。戻り値: 新しく作成された Closure オブジェクトを返すか、失敗した場合は

<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> <code>クラス A {
関数 __construct($val) {
$this->val = $val;
}
関数getClosure() {
>$ob1 = 新しい A(1);
$ob2 = 新しい A(2);
$cl = $ ob1->getClosure();
echo $cl(), "n";
$cl = $cl->bindTo($ob2);
echo $cl(), "n";
?>

17. コンテキストオプションとパラメータ

ソケット コンテキスト オプションは、tcphttp

、<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>ftp

など、ソケット上で動作するすべてのラッパー プロトコルで使用できます。 <code><span><?php <br />// '192.168.0.100' IP を使用してインターネットに接続します<br>$opts = array(<br> 'socket' => array(<br> 'bindto' => '192.168.0.100:0',<br> ),<br>);<br>// IP '192.168.0.100' とポート '7000' を使用してインターネットに接続します<br>$opts = array(<br> 'socket' => array(<br> 'bindto' => '192.168.0.100:7000',<br> ),<br>) ;<br>// ポート '7000' を使用してインターネットに接続します<br>$opts = array(<br> 'socket' => array(<br> 'bindto' => '0: 7000',<br> ),<br>);<br>// コンテキストを作成します...<br>$context = stream_context_create($opts);<br>// ...そしてこれを使用してデータを取得します<br>echo file_get_contents('http://www.example.com', false, $context);<br>?><em></em></span> HTTP コンテキスト オプション — HTTP コンテキストのオプションのリスト。 http:// および

https://🎜 トランスポート プロトコルに提供されるコンテキスト オプション。オプションのオプション: 🎜🎜
<code>methodstring リモートサーバーは、<code>methodstring 远程服务器支持的 <code>GET<code>POST 或其它 HTTP 方法。默认值是 <code>GET
<code>headerstring 请求期间发送的额外 header 。在此选项的值将覆盖其他值 (诸如 User-agent:, Host: 和 Authentication:)。
<code>user_agentstring 要发送的 header User-Agent: 的值。如果在上面的 header context 选项中没有指定 user-agent,此值将被使用。默认使用 php.ini中设置的 user_agent。
<code>contentstring 在 header 后面要发送的额外数据。通常使用POST或PUT请求。
<code>proxystring URI 指定的代理服务器的地址。(e.g. tcp://proxy.example.com:5100).
<code>request_fulluriboolean 当设置为 <code>TRUE 时,在构建请求时将使用整个 URI 。(i.e. GET http://www.example.com/path/to/file.html HTTP/1.0)。 虽然这是一个非标准的请求格式,但某些代理服务器需要它。默认值是 <code>FALSE.
<code>follow_locationinteger 跟随 Location header 的重定向。设置为 0 以禁用。默认值是 1
<code>max_redirectsinteger 跟随重定向的最大次数。值为 1 或更少则意味不跟随重定向。默认值是 20
<code>protocol_versionfloat HTTP 协议版本。默认值是 1.0。PHP 5.3.0 以前的版本没有实现分块传输解码。 如果此值设置为 1.1 ,与 1.1 的兼容将是你的责任。
<code>timeoutfloat 读取超时时间,单位为秒(s),用 float 指定(e.g. 10.5)。默认使用 php.ini 中设置的 default_socket_timeout。
<code>ignore_errorsboolean 即使是故障状态码依然获取内容。默认值为 <code>FALSE<code>GET<code>POST
、またはその他の HTTP メソッドをサポートします。デフォルト値は
<code>GET

です。

<code>headerstring リクエスト中に送信される追加ヘッダー。このオプションの値は、他の値 (

User-agent:

Host:Authentication: など) をオーバーライドします。

<code>user_agentstring 送信されるヘッダー User-Agent: の値。上記の header コンテキスト オプションでユーザー エージェントが指定されていない場合は、この値が使用されます。デフォルトでは、php.ini で設定された user_agent が使用されます。

<code>contentstring ヘッダーの後に送信される追加データ。通常は、POST リクエストまたは PUT リクエストを使用します。 <code>methodstring <code>GET<code>POST,或者其他远程服务器支持的 HTTP 方法。默认为 <code>GET.
<code>headerstring 额外的请求标头。这个值会覆盖通过其他选项设定的值(如: User-agent:Host:, ,Authentication:)。
<code>user_agentstring 设置请求时 User-Agent 标头的值。默认为 php.ini 中的 user_agent设定。
<code>contentstring 在头部之后发送的额外数据。这个选项在 <code>GET 和 <code>HEAD请求中不使用。
<code>proxystring URI,用于指定代理服务器的地址(例如 tcp://proxy.example.com:5100)。
<code>max_redirectsinteger 最大重定向次数。1 或者更小则代表不会跟随重定向。默认为 20.
<code>curl_verify_ssl_hostboolean校验服务器。默认为 <code>FALSE。这个选项在 HTTP 和 FTP 协议中均可使用。
<code>curl_verify_ssl_peerboolean 要求对使用的SSL证书进行校验。默认为 <code>FALSE。
<code>proxystring URI はプロキシ サーバーのアドレスを指定します。 (例:
tcp://proxy.example.com:5100

).

🎜🎜🎜<code>request_fulluriboolean 🎜<code>TRUE🎜 に設定すると、ビルド時に使用されますリクエスト URI 全体を使用します。 (つまり、 🎜GET http://www.example.com/path/to/file.html HTTP/1.0🎜)。 これは非標準のリクエスト形式ですが、一部のプロキシ サーバーではこれが必要です。デフォルト値は 🎜<code>FALSE🎜 です。🎜🎜🎜🎜<code>follow_location 🎜Location🎜 ヘッダーに続く整数のリダイレクトです。無効にするには 🎜0🎜 に設定します。デフォルト値は🎜1🎜です。 🎜🎜🎜🎜<code>max_redirectsinteger 従うリダイレクトの最大数。 🎜1🎜 以下の値は、リダイレクトが行われないことを意味します。デフォルト値は🎜20🎜です。 🎜🎜🎜🎜<code>protocol_versionfloat HTTP プロトコルのバージョン。デフォルト値は🎜1.0🎜です。 PHP 5.3.0 より前のバージョンでは、チャンク転送デコードが実装されていませんでした。 この値が 🎜1.1🎜 に設定されている場合、 🎜1.1🎜 との互換性はあなたの責任になります。 🎜🎜🎜🎜<code>timeoutfloat 読み取りタイムアウト (秒単位)、float で指定します (例: 🎜10.5🎜)。 php.ini で設定されたdefault_socket_timeout がデフォルトで使用されます。 🎜🎜🎜🎜<code>ignore_errorsboolean は、障害ステータス コードであってもコンテンツを取得します。デフォルト値は 🎜<code>FALSE🎜.🎜🎜🎜 🎜 🎜 🎜🎜FTP コンテキスト オプション — FTP コンテキスト オプションのリスト🎜🎜 🎜🎜SSL コンテキスト オプション — SSL コンテキスト オプションのリスト。 🎜ssl://🎜 および 🎜tls://🎜 トランスポート プロトコル コンテキスト オプションのリスト。オプション: 多数。 🎜🎜 🎜🎜CURL コンテキスト オプション — CURL コンテキスト オプションのリスト。 CURL コンテキスト オプションは、CURL 拡張機能がコンパイルされるときに使用できます (🎜--with-curlwrappers🎜 構成オプション経由)。オプションのオプション: 🎜🎜 🎜🎜🎜<code>methodstring 🎜<code>GET🎜、🎜<code>POST🎜、またはリモートサーバーでサポートされている他の HTTP メソッド。デフォルトは 🎜<code>GET🎜 です。🎜🎜🎜🎜<code>headerstring 追加のリクエストヘッダー。この値は、他のオプション (🎜User-agent:🎜、🎜Host:🎜、 、🎜Authentication:🎜 など) で設定された値をオーバーライドします。 🎜🎜🎜🎜<code>user_agentstring リクエストの User-Agent ヘッダーの値を設定します。デフォルトは、php.ini の user_agent 設定です。 🎜🎜🎜🎜<code>contentstring ヘッダーの後に送信される追加データ。このオプションは、🎜<code>GET🎜 リクエストと 🎜<code>HEAD🎜 リクエストでは使用されません。 🎜🎜🎜🎜<code>proxystring URI。プロキシ サーバーのアドレスを指定するために使用されます (例: 🎜tcp://proxy.example.com:5100🎜)。 🎜🎜🎜🎜<code>max_redirectsinteger リダイレクトの最大数。 🎜1🎜 以下は、リダイレクトが従わないことを意味します。デフォルトは 🎜20🎜.🎜🎜🎜🎜<code>curl_verify_ssl_host ブール値検証サーバーです。デフォルトは 🎜<code>FALSE です。 🎜このオプションは、HTTP プロトコルと FTP プロトコルの両方で使用できます。 🎜🎜🎜🎜<code>curl_verify_ssl_peerboolean では、使用される SSL 証明書の検証が必要です。デフォルトは 🎜<code>FALSE です。 🎜このオプションは、HTTP プロトコルと FTP プロトコルの両方で使用できます。ページを取得し、データを POST として送信します: 🎜🎜🎜 🎜 🎜<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 コンテキスト オプション — Phar コンテキスト オプションのリスト。 phar:// ラッパーのコンテキスト オプション。オプション: <code>compressint Phar compression constants 中的一个。<code>metadata混合 Phar メタデータ。 Phar::setMetadata() を参照してください。

コンテキストパラメータ — コンテキストパラメータのリスト。これらのパラメーター (parameters) は、関数 stream_context_set_params() によって返される context に設定できます。パラメータ: <code>notificationcallable ストリーム上でイベントが発生すると、呼び出し可能オブジェクトが呼び出されます。

18. サポートされているプロトコルとパッケージ化プロトコル

file:// — ローカル ファイル システムにアクセスします。 ファイルシステムは、PHPで使用されるデフォルトのラッパープロトコルであり、ローカルファイルシステムを公開します。 相対パス (/、、、\、または Windows ドライブ文字で始まらないパス) が指定された場合、指定されるパスは現在の作業ディレクトリに基づきます。 多くの場合、変更されていない限り、これはスクリプトが存在するディレクトリです。 CLI を使用する場合、ディレクトリはデフォルトでスクリプトが呼び出されるディレクトリになります。

fopen() や file_get_contents() などの特定の関数では、include_path は相対パスとしてもオプションで検索されます。

カプセル化プロトコルの概要
属性 サポート
allow_url_fopen の影響を受けます いいえ
読み取りを許可する はい
書き込みを許可します はい
追加を許可します はい
同時読み取りと書き込みを許可します はい
サポート統計() はい
リンク解除()をサポート はい
名前変更()をサポート はい
mkdir()をサポート はい
rmdir()をサポート はい

http:// -- https:// -- HTTP(s) URL にアクセスします。 HTTP 1.0 GET メソッドを介したファイルまたはリソースへの読み取り専用アクセスを許可します。 HTTP リクエストには、ドメイン名ベースの仮想ホストとの互換性を確保するための Host: ヘッダーが付属します。 user_agent 文字列が php.ini ファイルまたはバイト ストリーム コンテキストで設定されている場合、それもリクエストに含まれます。データ ストリームではリソースの body を読み取ることができ、ヘッダーは $http_response_header 変数に保存されます。

ドキュメント リソースの送信元の URL を知る必要がある場合 (すべてのリダイレクトを処理した後)、データ フローによって返される一連の応答ヘッダーを処理する必要があります。

カプセル化プロトコルの概要
属性 サポート
allow_url_fopenの対象 はい
読み取りを許可します はい
書き込みを許可します いいえ
追加を許可します いいえ
同時読み取りと書き込みを許可します 該当なし
サポート統計() いいえ
リンク解除()をサポート いいえ
名前変更()をサポート いいえ
mkdir()をサポート いいえ
rmdir()をサポート いいえ

ftp:// -- ftps:// -- FTP URL にアクセスします。新しいファイルを作成するだけでなく、FTP 経由で既存のファイルを読み取ることもできます。 サーバーがパッシブ モード FTP をサポートしていない場合、接続は失敗します。

ファイルを開いた後は、読み取りと書き込みの両方が可能ですが、同時にはできません。 リモート ファイルが FTP サーバー上に既に存在する場合、コンテキスト オプション overwrite を指定せずにファイルを開いて書き込もうとすると、接続は失敗します。 FTP 経由で既存のファイルを上書きする場合は、コンテキストの overwrite オプションを指定して開いて書き込みます。 代わりに、FTP 拡張機能を使用することもできます。 php.ini で from ディレクティブを設定すると、この値は匿名 FTP のパスワードとして使用されます。

カプセル化プロトコルの概要
プロパティ PHP 4 PHP 5
allow_url_fopen の影響を受けます はい はい
読み取りを許可する はい はい
書き込みを許可します はい (新しいファイルのみをサポートします) はい (<code>overwriteを有効にした後の新しいファイル/既存のファイル)
追加を許可します いいえ はい
同時読み取りと書き込みを許可します いいえ いいえ
サポート統計() いいえ 5.0.0 以降: filesize()、filetype()、file_exists()、is_file()、is_dir() のみ。 PHP 5.1.0 以降: filemtime()。
リンク解除()をサポート いいえ はい
名前変更()をサポート いいえ はい
mkdir()をサポート いいえ はい
rmdir()をサポート いいえ はい

php:// — さまざまな入出力ストリーム (I/O ストリーム) にアクセスします。 PHP は、PHP の入出力ストリーム、標準入力、出力、およびエラー記述子、メモリ内、ディスクバックアップの一時ファイル ストリーム、および他のファイル ストリームで動作できるフィルタへのアクセスを可能にする、さまざまな入出力 (IO) ストリームを多数提供します。読み書き可能なファイル リソース。

php://stdinphp://stdoutphp://stderrを使用すると、PHPプロセスの対応する入力ストリームまたは出力ストリームに直接アクセスできます。 データ ストリームはコピーされたファイル記述子を参照するため、php://stdin を開いて閉じた場合、コピーを閉じるだけであり、実際に参照されている <code>STDIN<code>STDIN 并不受影响。 注意 PHP 在这方面的行为有很多 BUG 直到 PHP 5.2.1。 推荐你简单使用常量 <code>STDIN、 <code>STDOUT 和 <code>STDERR は影響を受けません。 PHP 5.2.1 までは、この領域での PHP の動作にはバグがあったことに注意してください。 これらのラッパーを手動で開く代わりに、定数 <code>STDIN

<code>STDOUT

、および <code>STDERR を単純に使用することをお勧めします。 php://stdinは読み取り専用、

php://stdout

php://stderrは書き込み専用です。 php://inputは、要求された生データにアクセスできる読み取り専用ストリームです。 POST リクエストの場合、特定の php.ini ディレクティブに依存しないため、$HTTP_RAW_POST_DATA の代わりに php://input を使用することをお勧めします。 さらに、この場合 $HTTP_RAW_POST_DATA はデフォルトでは設定されないため、always_populate_raw_post_data をアクティブにするよりも必要なメモリが少なくなる可能性があります。

enctype="multipart/form-data"

を使用する場合、php://inputは無効です。

php://output は、 print や echo と同じ方法で出力バッファに書き込むことができる書き込み専用のデータ ストリームです。

php://fd

は、指定されたファイル記述子への直接アクセスを許可します。 たとえば、php://fd/3 はファイル記述子 3 を指します。 php://memoryphp://temp は、一時データの読み取りと書き込みを可能にするファイル ラッパーに似たデータ ストリームです。 2 つの唯一の違いは、php://memory は常にデータをメモリに保存するのに対し、php://temp はメモリ量が事前に定義された制限 (デフォルトは 2MB) に達した後にデータを一時ファイルに保存することです。 。 一時ファイルの場所は、sys_get_temp_dir() と同じ方法で決定されます。 php://temp のメモリ制限は、

/maxmemory:NN

を追加することで制御できます。NN は、メモリに保持されるデータの最大量 (バイト単位) を超える場合、一時ファイルが使用されます。

php://filter🎜は、データストリームが開かれたときにアプリケーションをフィルタリングするために設計されたメタラッパーです。 これは、データ ストリームのコンテンツが読み取られる前に追加のフィルターを適用する機会がない、readfile()、file()、file_get_contents() などのオールインワン ファイル関数に役立ちます。 🎜php://filter🎜 ターゲットは、パスの一部として次のパラメーターを使用します。 複合フィルター チェーンをパス上に指定できます。 🎜🎜
カプセル化プロトコルの概要 (php://filterについては、フィルターされたラッパーを参照してください。)
属性 サポート
最初にallow_url_fopenを使用します いいえ
まずallow_url_includeを使用します php://inputphp://stdinphp://memoryphp://tempのみ。
読み取りを許可する php://stdinphp://inputphp://fdphp://memoryphp://tempのみ。
書き込みを許可します php://stdoutphp://stderrphp://outputphp://fdphp://memoryphp://tempのみ。
追加が許可されました php://stdoutphp://stderrphp://outputphp://fdphp://memoryphp://tempのみ(書き込みに等しい)
同時読み取りと書き込みを許可します php://fdphp://memoryphp://tempのみ。
サポート統計() php://memoryphp://tempのみ。
リンク解除()をサポート いいえ
名前変更()をサポート いいえ
mkdir()をサポート いいえ
rmdir()をサポート いいえ
stream_select()のみをサポートします php://stdinphp://stdoutphp://stderrphp://fdphp://temp

zlib:// -- bzip2:// -- zip:// — 圧縮ストリーム。 zlib: PHP 4.0.4 - PHP 4.2.3 (fopencookie を備えたシステムのみをサポート)

compress.zlib:// および compress.bzip2:// PHP 4.3.0 以降

zlib: は gzopen() のような関数ですが、そのデータ ストリームは fread() や他のファイル システム関数でも使用できます。 これは、「:」文字を含む他のファイル名と混同されるため、PHP 4.3.0 以降では非推奨になりました。代わりに compress.zlib:// を使用してください。

compress.zlib://compress.bzip2://は、gzopen()およびbzopen()と同等です。 fopencookie をサポートしていないシステムでも使用できます。

ZIP 拡張子は、zip: カプセル化プロトコルに登録されています。オプション

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

data:// — データ (RFC 2397)。使用法: data://text/plain;base64,

カプセル化プロトコルの概要
属性 サポート
allow_url_fopenの対象 いいえ
allow_url_includeの対象 はい
読み取りを許可する はい
書き込みを許可します いいえ
追加が許可されました いいえ
同時読み取りと書き込みを許可します いいえ
サポート統計() いいえ
リンク解除()をサポート いいえ
名前変更()をサポート いいえ
mkdir()をサポート いいえ
rmdir()をサポート いいえ

データの内容を印刷://:

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

コード> メディアタイプを取得:

<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> <code><p><?php <br />$fp = fopen('data://text/plain;base64,', 'r');<br>$meta = stream_get_meta_data($fp);<br>echo $meta['mediatype']; // "text/plain" を出力します<br>?><span></span></p> glob:// — 一致するファイル パス パターンを検索します。使用法: glob://属性サポートallow_url_fopenの対象いいえallow_url_includeの対象いいえ読み取りを許可するいいえ書き込みを許可しますいいえ添付ファイルを許可するいいえ同時読み取りと書き込みを許可しますいいえサポート統計()いいえリンク解除()をサポートいいえ 🎜 🎜
カプセル化プロトコルの概要
声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
アクション中のPHP:実際の例とアプリケーションアクション中のPHP:実際の例とアプリケーションApr 14, 2025 am 12:19 AM

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHP:インタラクティブなWebコンテンツを簡単に作成しますPHP:インタラクティブなWebコンテンツを簡単に作成しますApr 14, 2025 am 12:15 AM

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPython:2つの一般的なプログラミング言語を比較しますPHPとPython:2つの一般的なプログラミング言語を比較しますApr 14, 2025 am 12:13 AM

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPの永続的な関連性:それはまだ生きていますか?PHPの永続的な関連性:それはまだ生きていますか?Apr 14, 2025 am 12:12 AM

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。

PHPの現在のステータス:Web開発動向を見てくださいPHPの現在のステータス:Web開発動向を見てくださいApr 13, 2025 am 12:20 AM

PHPは、現代のWeb開発、特にコンテンツ管理とeコマースプラットフォームで依然として重要です。 1)PHPには、LaravelやSymfonyなどの豊富なエコシステムと強力なフレームワークサポートがあります。 2)パフォーマンスの最適化は、Opcacheとnginxを通じて達成できます。 3)PHP8.0は、パフォーマンスを改善するためにJITコンパイラを導入します。 4)クラウドネイティブアプリケーションは、DockerおよびKubernetesを介して展開され、柔軟性とスケーラビリティを向上させます。

PHP対その他の言語:比較PHP対その他の言語:比較Apr 13, 2025 am 12:19 AM

PHPは、特に迅速な開発や動的なコンテンツの処理に適していますが、データサイエンスとエンタープライズレベルのアプリケーションには良くありません。 Pythonと比較して、PHPはWeb開発においてより多くの利点がありますが、データサイエンスの分野ではPythonほど良くありません。 Javaと比較して、PHPはエンタープライズレベルのアプリケーションでより悪化しますが、Web開発により柔軟性があります。 JavaScriptと比較して、PHPはバックエンド開発により簡潔ですが、フロントエンド開発のJavaScriptほど良くありません。

PHP対Python:コア機能と機能PHP対Python:コア機能と機能Apr 13, 2025 am 12:16 AM

PHPとPythonにはそれぞれ独自の利点があり、さまざまなシナリオに適しています。 1.PHPはWeb開発に適しており、組み込みのWebサーバーとRich Functionライブラリを提供します。 2。Pythonは、簡潔な構文と強力な標準ライブラリを備えたデータサイエンスと機械学習に適しています。選択するときは、プロジェクトの要件に基づいて決定する必要があります。

PHP:Web開発の重要な言語PHP:Web開発の重要な言語Apr 13, 2025 am 12:08 AM

PHPは、サーバー側で広く使用されているスクリプト言語で、特にWeb開発に適しています。 1.PHPは、HTMLを埋め込み、HTTP要求と応答を処理し、さまざまなデータベースをサポートできます。 2.PHPは、ダイナミックWebコンテンツ、プロセスフォームデータ、アクセスデータベースなどを生成するために使用され、強力なコミュニティサポートとオープンソースリソースを備えています。 3。PHPは解釈された言語であり、実行プロセスには語彙分析、文法分析、編集、実行が含まれます。 4.PHPは、ユーザー登録システムなどの高度なアプリケーションについてMySQLと組み合わせることができます。 5。PHPをデバッグするときは、error_reporting()やvar_dump()などの関数を使用できます。 6. PHPコードを最適化して、キャッシュメカニズムを使用し、データベースクエリを最適化し、組み込み関数を使用します。 7

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター