ホームページ  >  記事  >  バックエンド開発  >  52. セッションストレージ

52. セッションストレージ

WBOY
WBOYオリジナル
2016-06-13 12:26:261129ブラウズ

PHP パート

1. 仮想ホストを構成する方法は何通りありますか?

1 つの物理サーバー上で複数のサイトを実行/保守できます。ユーザーは、異なる IP またはドメイン名を使用してサイトにアクセスできます。

仮想ホストを構成するには、次の 2 つの方法があります。 🎜> IP アドレスに基づく構成 (複数のネットワーク カードによって実装)

ホスト名による仮想ホストに基づく構成 (1 つの IP にマッピングされた複数のドメイン名)

2. ライフ サイクルとはPHPスクリプトの?

3. PHP 変数の直接値転送と参照値転送

直接値転送: コピー値転送 $a = $b

参照値転送: ショートカット &$ a = $b

拡張子:

現実的なコピー: 値渡しまたは参照渡しの場合、システム内の 2 つの変数の値が同じ場合、メモリ領域を節約するため変数の 1 つが変更されるまで、システムは新しいメモリを開いて変数を保存します。これはリアル コピー

と呼ばれます。 4. PHP 変数の定義

は文字、アンダースコア、数字で構成されますが、数字で始めることはできません。

5 print_r() と var_dump() の違い。 echo

Echo: カンマで区切って複数の値を一度に出力できます。echo は実際の関数ではなく言語構造です。

Print_r: 文字列を結合でき、数値は単純に出力されます。 、配列はキーと値の括弧で囲まれたリストとして表示されます。

Var_dump: 文字列、配列、数値、オブジェクトを含む任意の変数を使用し、変数の型と長さを指定できます。この関数は、式のタイプや値など、1 つ以上の式に関する構造情報を表示します。配列は値を再帰的に展開し、インデント

6. 変数 unset();

7 を削除します。一度定義すると変更できなくなります。通常は変数を区別するために大文字が使用されます。

Definition: Define('PI','3.14') Access define('PI')

Definition: Const PI = 3.14 アクセス constent ('PI')

Defined() 特定の定数が存在するかどうかを確認します

8. システム事前定義変数

a) $_POST

b ) $ _Get

C) $ _Request

D) $ _Server

E) $ _Session

F) ) $ GLOBALS // 変数全体的な状況で使用される変数を格納するために特に使用されます

H) $ _Files ['FILENAME'] // & LT; input Type = "File" name = 'FILENAME'/& GT;/

9. システム定数

a) PHP_OS サーバーの動作環境を確認します

b) PHP_VERSION php のバージョン情報を確認します

c) PHP_INT_SIZE 基本的な内容を確認しますphp のパラメーター ストレージ ユニット 1bety=8 ビット 255 中ステータス

d) PHP_INT_MAX php の最大の整数を表示

e) __FIFE__ 現在のファイルの絶対パス (ファイル名を含む)

f) __LINE__ 現在の行番号を取得

g) __DIR__ 現在のファイルの絶対パス(ファイル名を除く)

h) __FUNCTION__ 関数名を取得

10. PHP データ型

1) スカラーデータ型:

整数型: 4 バイトの格納値、最大整数型を超える場合は自動的に浮動小数点型に変換されます。 point 型

浮動小数点型: float: 単精度の精度は約 7 桁、値は 10^32

Double: 倍精度は約 15 桁、値は 10^308 ブール型

文字列型

2) 複合データ型: 配列、オブジェクト

区切り文字 $str =< ;<

引用符と二重引用符の違い

単一引用符は PHP の変数を解析できませんが、二重引用符は解析できます (変数の後に文字がある場合) {} を使用して区切ってください)

JS 変数

内の単一引用符と二重引用符は解析できません。一重引用符とバックスラッシュ

のみを翻訳できます。 . 二重引用符:

を除くすべての引用符を翻訳できます。

12. 演算子

算術演算、比較、代入、リンク、エラー抑制、自己演算、三項演算子、

論理 && (通常、&& は Or になります。前にある || は true (より効率的です)

ビット単位の演算

&: ビット単位の AND、同じ値が 1 の場合、1

|:ビット単位の OR、1 があれば 1

~: ビット単位の否定、0 は 1 になり、1 は 0 になります

^: ビット単位の OR、同じであれば、 0、異なる場合は 1

>分岐構造: if と switch 構造

ループ構造: for foreach (JS for...in...) while do ..while

14. ループ制御

Continue: end このループでは、次のループを実行し続けます。また、パラメーターを使用して複数のレベルのループからジャンプすることもできます

Break: 現在のループ本体を終了し、ループ本体の下のコンテンツを継続して実行します。

タグ構文

の複数のレベルからジャンプすることができます。

If foreach while

:

?> > 🎜>① ソースコード読み込み à コンパイル à 字句解析 (解析エラー) à 構文解析 (解析エラー) à オペコードの生成 à オペコードの実行 (致命的エラー) à HTML コード

🎜>

# コールバック関数: 関数内の変数を使用して外部関数を呼び出し、

に渡されたパラメーターを処理します。

# 関数名は大文字と小文字を区別しません

関数のスコープ: グローバルとローカルは関数によって制限されます

グローバルへのローカル アクセス: 参照渡し、$GLOBALS (スーパーグローバルの事前定義済み)変数)、グローバル キーワード

ローカルへのグローバル アクセス: グローバル キーワード、return 戻り値

$GLOBAL スーパーグローバル事前定義変数、変数はどこでも使用でき、変数の値は変更可能

グローバル キーワードは関数内に変数を導入することしかできず、値を代入することは基本的に関数内にローカル変数を作成することになり、メモリ アドレスが外部変数のアドレスを指すようになります。外部変数はありません。自分で作成します

18. 静的変数

一度初期化され (コンパイルされ、コードセグメントに保存されます)、通常は再帰とペアになります

19、疑似型

数値 混合コールバック void

20、データ型変換

False 0 0.0 '' null array() オブジェクト à はすべて false

(int) (bool) (float) (string) (array) (object)

21. データ型の判定

is_bool: データ型がブール型であるかどうかを判定します。

is_float: データが浮動小数点型かどうか判定

is_integer: 整数判定

is_object: オブジェクト判定

is_array: 配列判定

is_string: 文字列判定

is_resource: リソース判定

is_scalar: スカラー判定: 整数、浮動小数点、ブール、文字列型すべて判定可能

is_null:

が空かどうか

is_numeric:

数値型判定(

純粋な数値列)

Gettype: データのデータ型を取得します: 返された文字列の説明

Settype: データのデータ型を変更します (データ自体を変更します: 永続的)

22. 空と未定義の違いEmpty は変数が空かどうかをチェックします

つまり、""、0、"0"、NULL、FALSE、array() 、 var $var、未定義; var の場合、属性のないオブジェクトは空とみなされます。 空の場合、TRUE を返します

Isset 変数が設定されているかどうかを確認します 変数が存在する場合 (そうでない場合) NULL)、TRUE を返します拡張子:

Null つまり、存在しないオブジェクトのプレースホルダーです

未定義 変数は宣言されていますが、代入がありません

NaN は数値ではありません

23。ファイルには

意味: ページ レイアウト、コードの再利用

上方包含: 通常は構造体 (クラスと関数) を使用します。 ) 他のスクリプト内

下向きインクルード: 通常は現在のスクリプトのデータ用 対応する HTML に表示

include と require の違い: ファイルをインクルードする際のエラー処理に対する態度が異なります

include はインクルードを試みるだけで警告が表示されますが、後続のコードは引き続き実行されます。

要件はインクルードを強制することであり、致命的なエラーが発生し、後続のコードは実行を継続しません

include_once は 1 回だけインクルードされ、include は実行時に 1 回インクルードされます

require_once 同上

24. ファイルパス

ディスクの絶対パス: D:/server/apache (サーバー側でのみ使用され、HTML には書き込めません)

ネットワークの絶対パス: http://localhost/ (サイトのルート ディレクトリから始めてどこでも使用できます)

./ 現在のディレクトリ

../ 上位ディレクトリ

/ Web サイトのルート ディレクトリ

絶対パスの方が正確 (__DIR__)、相対パスは効率的ですが間違っている可能性があります

25、配列

1) 配列を定義する 3 つの方法:

$arr = array();

$arr = null; arr[] = 1;

2) 配列の分類:

インデックス配列、連想配列、混合配列 (すべて添字で区別)

3) count($ arr ) 関数: 配列

内のすべての要素をクエリします。 4) 配列の走査

for(): インデックス配列のみを走査できます。

foreach(): すべての要素を走査できます。 array は配列内の配列ポインタを使用します

5) Each(): 配列ポインタを通じて配列要素を取得する関数。これにより、

現在の 配列ポインタ と 値の両方を取得できます (配列のポインタはちょうど添え字 0 にあります)。データのセットは、4 つの要素 (1 と値) を持つ配列であるアソシエーションとインデックスの形式で返されます。値を保存します。 0 と key キー名を保存します。

each() は、配列に一度アクセスした後、ポインターが 1 ビット下に移動します。配列の場合、 false を返します。 Each() は、現在の Where が配列のポインタであることを証明できます

6) List(): リスト関数は、バッチで変数に値を割り当てることができます

リスト (変数リスト) = 配列; 通常、リストは配列を走査するためにそれぞれとともに使用されます

7) 配列関連関数

key: 現在の配列ポインターが指すキー名を取得します

Current: 現在の配列ポインターが指すキー値を取得します

Next: 現在のポインターの次の要素の値を取得し、ポインターを次の配列要素に移動します

Prev: 現在のポインタの前の要素の値を取得し、ポインタを前の配列要素に移動します

end: 配列の最後の要素を取得し、ポインタを最後の要素に移動します

reset: リセット、配列ポインタを最初の要素に移動します

next または prev では削除された配列のポインタを元に戻すことはできません

end とリセットではポインタを元に戻すことができます

array_keys: 配列のすべての添え字 (キー名) を取得し、インデックス配列を返します

array_values: 配列のすべての値を取得し、インデックス配列を返します

26. データ構造シミュレーション

データ構造:データ格納方式

共通データ構造:スタック(先入れ後出し)キュー(先入れ先出し)

Array_push 配列の後ろに要素を追加します

array_pop 配列の後ろから要素をポップします

array_shift From 配列の前に要素をポップします

array_unshift 追加配列の先頭からの要素

27. 配列文字列の変換

explode(',',$str) 文字列は次のように展開されます。特定の方法で配列

implode('-',$arr) 配列は特定の方法で文字列に組み込まれます

28. 配列の合計演算

1)加算演算: インデックスと関連付けを区別しません。

演算方法: 最初の配列のすべての要素を保持し、2 番目の配列の要素を検索します。同じ添字が存在する場合、それは無視されます。存在しない場合は追加します

2) array_merge(): まず最初の配列のすべての要素を保持しようとし、2 番目の配列で同じ添え字 (インデックス) が存在する場合は、次のようにします。前の要素が存在しない場合は、最初の要素を保持します。後でインデックスの添字に対応する要素があれば、それを最初の配列の末尾に直接追加し、インデックス

をリセットします。配列検証コード

1) range 関数を使用して、指定された範囲内の乱数 range(0,9)、range(a,z)、range(A,Z) を取得します

2) 配列 array_range() をマージします

3) array_rand($array,$num) 関数を通じてランダムな添え字を取得します

4) shuffle() を使用して添え字を中断します

5) 添え字を走査して、マージされた配列

から検証コードを取得します。29. システム関数

文字列関数:

1) Strlen( $str): 文字列を取得 文字列の長さ

2)Substr($str, 開始点, 終了点) 指定範囲内の文字列を取得します。終了点が指定されていない場合は、 end

3)Strto lower($str): すべての文字列を小文字にする

4)Strtoupper($str): すべての文字列を大文字にする

5)Strrev($str):reverse文字列を反転します

6) Strpos: 指定した文字の位置を取得します

7) Strrpos: 文字列の右からの位置を取得します

8) Strchr ( $str, '|') 一致した文字列を最後まで (左から右へ) 切り取ります

9) Strrchr($str,'.') は、一致する場所から文字列をインターセプトします (後ろから前へ)

10) Trim() は、文字列の両側にあるスペースまたは指定された文字を削除します

11) str_repeat: 指定した文字列を繰り返し出力します

日時関数

1) time(): 現在時刻のタイムスタンプを取得します

2) Date(): タイムスタンプを日付に変換します

Date('Y-m-d H:i:s') 現在の日付を取得します

Date('Y-m-d H:i:s',time()) 同上

Strtotime(): 文字列をタイムスタンプに変換

Microtime(): マイクロ秒を取得

数学関連関数

Abs: 絶対値を取得

Floor: 切り捨て

Ceil: 切り上げ

Round:切り上げ

Rand:指定した間隔で乱数を取得

mt_rand:指定した間隔で乱数を取得

30. ブラウザの値の受け渡し

1) ブラウザの値の受け渡しには 2 つの方法があります: get と post、つまり URL とフォームの値の受け渡し

2) URL 構成: http :// (http プロトコル) localhost: 80 (ホスト) URI (Uniform Resource Location)

3) フォームで渡される値は name 属性名で区別され、同じ名前が出現すると上書きされます

4 )$_REQUERST: 安全ではありません。post および get データは、array_merge() 関数によってマージされます。同じ名前の関数が出現すると、上書きされます。php.ini の request_order オプションは、上書きの順序を表します。 🎜>

31. ファイルのアップロード

ファイルのアップロードは 2 つの部分に分かれています: クライアントのアップロードとサーバーの受信

1) サーバーはファイルを受信する必要があります: php.ini file_uploads でファイルのアップロードを有効にします= on

2) ファイルアップロード用の一時ファイル保存ディレクトリを変更します: Upload_tmp_dir =

3) 大きなファイルは郵送で配送する必要があるため、送信方法は post

4) フォーム フィールドを使用して、

ここでの名前の値は、$_FILE['upfile']

5) を通じて受信されます。 get および post によって送信されるデータは、デフォルトでは文字列型であり、ファイルがアップロードされるときはバイナリ形式になります。そのため、バイナリ データの送信に post を使用する場合は、送信データ型を binary

6) var_dump($_FILE) mime

7) ファイルは一時ファイルに保存されるため、アップロードが完了するとファイルのディレクトリはシステムによって再利用されるため、一時ファイルはリソースの保存に特別に使用されるディレクトリに移動する必要があります

Move_upload_file(tmp_path_filename,save_path_filename)

または copy(tmp_path_filename, save_path_filename)

32. ファイル操作

ファイル パス操作:

Read (パス内のフォルダー内のファイル名を取得)

Write (ファイル自体を追加、削除、変更する操作)

1) ファイルパスの読み取り操作

Opendir(): パスの下のファイル リソースを開きます

Readdir( ): このパス内のすべてのファイルを読み取ります (一度に 1 つずつ読み取るにはポインター トラバーサルが必要です)

Closedir( ): このパスのファイルを閉じます

Scandir(): このパスで読み取ります すべてのファイルをトラバースせずに一度に読み取ることができます

2) file_exists: ファイルが存在するかどうかを判断します

is_dir: パスであるかどうかを判断します

is_file: パスであるかどうかを判断します File

Mkdir: フォルダーを作成します

Rmdir: フォルダーを削除します

Getcwd: 作業パスを取得します

PHP5

ファイルの内容の読み取り PHP は任意の形式のデータを読み取ることができますが、使用できるのはバイナリではなく文字列

1) 読み取り操作 file_get_contents() および file()

file_get_contents(path_filename): 指定されたパスと URL にすることができます (

は get

request)

file(): 指定されたファイルから一度に 1 行のデータを読み取り、読み取ったデータを配列 (

) に保存しますExcel

)2) 書き込み操作 file_put_contents(targetfile,contents) 対象ファイルが存在しない場合、内容を書き込みます。デフォルトでは、書き込まれた内容は以前の内容を上書きします

PHP4 でのファイルの読み取りおよび書き込み操作

(

読み取りおよび書き込み操作の前にファイル リソースを開く必要があります)1) ファイル読み取り操作fopen($path,$model) : ファイル リソースを開きます

r/r: ファイルはファイル ヘッダーを指します

w/w: ファイルがそうでない場合、ファイルのポインターはファイルの先頭を指します (クリア)存在する場合は作成されます

a/a: ファイルのポインタはファイルの末尾を指します (追加)、ファイルが存在しない場合は作成されます

Fgetc : 1文字ずつ読み上げます。読み終わるとポインタが下に移動します

Fgets: 一度に複数の文字を 1 行まで読み取ります

Fread: 指定された長さの文字列を読み取ります

fclose() リソースを閉じます

2)ファイル書き込み操作

Fwrite()/Fputs: ファイル書き込み操作、ファイル書き込み操作はポインターの位置に従って実行され、ファイルの内容は上書きされます

3)ファイルポインタ fseek() ;

ファイル操作関数

1) copy

2) @unlink: ファイルの削除ファイルが存在しない場合、エラーを保持する必要があります

3) 名前の変更: Rename

4) Filemtime: ファイルの最終変更時刻を取得します

5) Filesize: Getファイルのサイズ

6)Fileperms: ファイル権限の取得

33. ファイルのダウンロード

ファイルのダウンロードの原則: サーバーはファイルを取得し、バイナリに変換します。ストリームを取得してブラウザに送信し、ブラウザはバイナリストリームを転送します 対応するファイル形式に変換します

1) リンク A からダウンロード

ブラウザで認識されないファイルを使用しますそれらをリンク a のパスに配置してダウンロードします

特徴: 安全ではありません。ダウンロード ファイルの種類に制限があるホストの IP アドレスを公開します (txt、jpg はダウンロードできません)

2 ) PHP ファイルのダウンロード

a. データが http プロトコルを介したバイナリ ストリームであることをブラウザに伝えます。

header('content-type:application/octet-stream') を解析しません。 ;

b. ブラウザに解析しないだけでなく、添付ファイルとして保存するように指示します

header('content-Disposition:attachment;filename='suggested file name' '') ; //

c を偽装し、ファイルを読み取り、ブラウザに渡します

echo file_get_contents('filename');

特徴: ファイル タイプの制限はありません。ファイルの実際のパスは公開されません

34. アルゴリズム (バブル、クイックソート)

35. HTTP

インターネットを介したデータ送信はハイパーテキスト送信です。ブラウザを介したデータのアクセスと送信はHTTPプロトコルの管理範囲内であり、プロトコルの内容はブラウザとサーバーが実際の状況に応じて構築します

1、機能

1) クライアント モードとサーバー モードをサポート

2) シンプルで高速: リクエスト メソッドとパスのみ

3 ) 柔軟性: プロトコル間で送信されるデータには特定のコンテンツはなく、文字列またはバイナリ ストリームにすることができます

4) コネクションレス: 各接続は 1 つのリクエストのみを処理し、リクエストは応答が完了すると切断されます。完了

5) ステートレス: トランザクション処理のためのメモリ容量はなく、1 つのリクエストに対する応答は 1 つだけであり、サーバーはブラウザの

2 とリクエスト

は認識できません。HTTP リクエストはリクエスト行、リクエストヘッダー、リクエストデータ

の 4 つの部分に分かれています。リクエスト行: リクエストメソッド、URI。 、プロトコル バージョン (HTTP/1.1)

content-type: post データが送信された場合にのみ存在します、データ形式を変換します (中国語をトランスコード)

したがって、フォームで送信されたデータが中国語の場合、post を使用して

3 を送信し、応答

応答は 4 つの部分に分かれています: 応答行、応答ヘッダー、空行、応答データ

応答行: プロトコル バージョン、ステータス コード、ステータスの説明

4、ステータスコード

1xx: リクエストは処理中ですが、まだ処理されていません

2xx: サーバーはリクエストを正しく処理しました303 - リクエストを再発行します

4xx: リクエスト エラー (サーバーはリクエストされたリクエストを正常に解析できません)

403 - 禁止されています 404 - 資金がありません

5xx: サーバー内部エラー

502—サーバーはアップストリームから正しい結果を取得できませんでした

fskokopen: ターゲット サーバーとの接続を確立します

36. オブジェクト指向の意味

プロセス指向:

プロセス指向はテクノロジーではなく、設計上のアイデアです。実装する必要があるプロセスは小さなノードに分割され、各ノードは最終的に関数の形で実装されます。関数呼び出しが連続している; トランザクションの展開を反映する操作がない (操作の対象、買い手と売り手の動作が分離されていない)

長所と短所: モジュール型プログラミングはコードの再利用を実現します

オブジェクト指向: オブジェクト指向も設計上のアイデアであり、テクノロジーではありません。トランザクション プロセス全体が小さなノードに分散されます。小さなノードを 1 つずつ実行し、実行中のトランザクションの本体に分散させます。

利点と欠点: 関数を使用してノード機能を実現し、人間の論理的思考に沿ったコードの再利用を実現します。

操作の本体をよりよく反映します。購入する家の行動、売り手の行動)

違い: プロセス指向、高効率、速い開発速度、人間の論理的思考に沿った、遅い。開発速度、後のメンテナンスの容易さ

クラス: サブジェクトの機能または特性の同じ部分を、オブジェクト (人間) の抽象体である抽象体に抽象化します

オブジェクト: クラスの具象表現 (アジア)

インスタンス化: クラスの具象表現をインスタンス化します (Abe)

クラスのメンバー: クラスで定義された内容 (プロパティ、メソッド、定数)

属性: クラスにデータを格納するために使用される変数

メソッド: クラス内の関数

クラス定数: クラスで定義された定数は、const キーワードを使用してのみ定義でき、define 関数を使用して定義することはできません

アクセス変更修飾子: は、クラス メンバーがアクセスできる範囲を制限するために使用されます public/protected/private

37. クラス メンバーへのアクセス

オブジェクトはクラスの外部に存在し、アクセスします。プロパティとメソッドはクラス内部に存在するため、アクセス修飾子によって制限されます。パブリック プロパティとメソッドはクラス外部からアクセスできますが、プライベートおよびプロテクト プロパティとメソッドはクラス内部でのみアクセスできます。

オブジェクトはクラス の属性とメソッドにアクセスできますが、クラス内であっても

$this にアクセスする必要があります。はクラス内(メソッド内)でのみ使用できるキーワードで、アクセスされたオブジェクトがメソッドを呼び出すと、メソッドにアクセスしているオブジェクトをすぐに捕捉でき、オブジェクトが保存したメモリアドレスが$thisに与えられます。 $this is 現在のメソッドにアクセスしているオブジェクトを表します (つまり、$this はクラス内のすべての訪問オブジェクトを表します)

構築メソッド : __construct() は、クラスがオブジェクトによって自動的に呼び出されるメソッド (パブリックである必要があります。そうでない場合、オブジェクトはインスタンス化できません)。コンストラクターの意味は、オブジェクトのプロパティを初期化することです

破棄メソッド : __destruce() オブジェクトは消滅しようとしています。オブジェクトは自動的にメソッドを呼び出します。存在の意味はリソースを破棄することです

スクリプト実行の最後: オブジェクトを保存する変数を削除します。変数が他のメモリ アドレスを指すようにし、変数に null 値を割り当てます

オブジェクト渡し: デフォルトは参照渡し

38 です。 🎜>クラスは通常、他のファイルに存在します。通常のロード形式は手動ロードと自動ロードです。

手動ロード: include_once ファイルの組み込み

自動ロード: __autoload() でクラス ファイル名を取得します。クラス名

38. クラス定数へのアクセス

クラスの定数はクラスに属しているため、

でアクセスします。クラス外

à クラス名::定数名à self::定数名 クラス

内の通常のプロパティとメソッドは

$this アクセスを使用し、クラス外 では オブジェクト名 を使用してアクセスします39. 静的プロパティとメソッド

静的プロパティとメソッドは両方ともクラスに使用されます

カウンタを完成させるためにコンストラクタに静的属性を追加できます

を使用します属性とメソッドを定義するキーワード static

クラス外アクセス

クラス名

::プロパティ/メソッド アクセス クラス 内:: プロパティ/メソッド 40. 静的と非静的の違い

1) 静的なもの (プロパティとメソッド) はクラス

2 によってアクセスされます。 ) 非静的なものはオブジェクトによってアクセスされます

3) 静的な存在: 作業効率が向上し、インスタンス化する必要がなく、メモリを消費する必要もありません

4) $this は静的メソッドでは使用できません

self と this の違い

$this は通常のメソッドでのみ使用できます。Self には制限がありません。これは通常のプロパティにのみアクセスできます。self は、継承された親クラスと属性にアクセスするための静的プロパティ (定数)

のみにアクセスできます。41. デザイン パターン

1) シングルトン モード: オブジェクトは 1 つのオブジェクトのみ生成できます

3 つのプライベートと 1 つのパブリック

プライベート コンストラクター: クラスが外部でオブジェクトを無限にインスタンス化するのを防ぎます

パブリック静的メソッド: go inside: インスタンス化を許可

プライベート静的プロパティ: 既存のオブジェクトを保存するために使用されます 既存のオブジェクト (複数の生成を防止します)

プライベート クローン作成メソッド: オブジェクトのクローン作成により新しいオブジェクトが生成されないようにします

2) ファクトリパターン: 独自のオブジェクトを生成せず、他のクラスのオブジェクトを生成する (include でクラスを手動でロードしてインスタンス化する)

42. オブジェクト指向の 3 つの大きな特徴

カプセル化

: データとデータを操作するメソッドをバンドルしてペアを形成します 外部には隠蔽された構造、内部はプライベートな構造ですが、外部操作インターフェイスを提供します (リモート アクセス クラス ファイルと見なされます)

継承: クラスのすべての属性とメソッド。別のクラスは現在のクラスから継承できます。継承されたクラスは親クラスと呼ばれます。継承されたクラスはサブクラスと呼ばれ、サブクラスは何も持たずに親クラスの属性とメソッドを使用できます。継承の意味: コードの再利用とコードの拡張

ポリモーフィズム: 複数の形式。強く型付けされたオブジェクト指向言語に特有の機能です。php は、ポリモーフィズムのない弱い型付け言語です。

のインスタンス化プロセス中。クラス: 標準型は親クラス型であり、取得されたサブクラス型は実際にサブクラス型です。最終オブジェクトは親クラスの形式を持ち、サブクラス

の正確な形式を表現します。ポリモーフィズムの場合、満たす必要があります: 継承と書き換え (サブクラスは親クラスと同じ属性またはメソッドを持ちます)

43. 継承と書き換え

基本概念: 親クラスを継承するすべてのサブクラスは、親クラスの属性とメソッドを持ちます。

基本構文: class child Class は親クラスを拡張します。 {}

継承の特性:

#継承は親クラスのすべての属性と非プライベート メソッド (保護された) を継承しますが、プライベート属性のみを継承します。親クラス内で使用されます (パブリック メソッドを通じてアクセスできます)、保護されたはサブクラス内でのみ使用でき、外部からは使用できません

#サブクラスは親を継承しませんが、クラスのプライベート メソッドは次のことができます。親クラスの public メソッドを通じて継承およびアクセスされる

#静的コンテンツはクラスに属しており、継承の条件を満たしていますが、静的コンテンツは継承とは呼ばれません。親クラスの一部の属性は継承されます。外部アクセスに使用されない場合は、

に制限することで変更できます。 >

要約: 属性を継承するかメソッドを継承するかに関係なく、継承の本質は次のとおりです。その属性の元のクラスは、オーバーライドできる場合はサブクラスに属し、オーバーライドできない場合はそのまま残ります。親クラス [継承される属性]

親クラスの属性を継承する場合、親クラスのすべての属性が継承されます。オーバーライドする場合は、private 属性のみが使用できます。使用されていたメソッドが変更されたため、サブクラス (このクラス) の属性がオブジェクト内で再作成され、

[継承メソッド]

パブリック メソッドをオーバーライドします (例: public メソッドの使用)。親クラスの他の属性/メソッドにアクセスするには)、継承可能

protected メソッドは継承可能

private メソッドは継承不可

inherited public/ protected メソッド。これらはすべて親クラスに属します。サブクラスは継承された public/protected メソッドをオーバーライドできますが、サブクラスが親クラスの他のメソッドにアクセスするために親クラスの public メソッドを呼び出す場合、private は引き続きそのメソッドを使用します。メソッド

書き換えのルール:

サブクラスが親クラスの属性とメソッドを書き換える場合: サブクラスの権限 (アクセス変更修飾子) が必要です権限が親クラスの権限より小さい (サブクラスの外部アクセス権限が親クラスの権限より高い): 親クラスが Protected の場合、サブクラスは protected または public でなければなりません

動的遅延バインディング 決定済み (self

と静的

の違い): self キーワードは常に次のことを表します最初から独自のクラスです。いいえ、メソッドの呼び出し元 (サブクラスと親クラス) に応じて変わります。静的キーワードは呼び出した人を表します (呼び出し元のオブジェクトを検出できます)

で継承PHP

の機能:

#PHP は多重継承をサポートしません: クラスは 1 つの親クラスのみを持つことができます#PHP はチェーン継承をサポートします: サブクラスは親クラスを継承します

# PHP の継承は双方向です。サブクラスは親クラスのメソッドと属性を継承し、親クラスは

属性または

にアクセスすることもできます。サブクラス

のメソッド 特殊クラス:

[Final class Final

]

#Classes Final で変更されたメソッドは継承できません #Final で変更されたメソッドはオーバーライドできません

[抽象クラス抽象]

#抽象クラスは継承のみ可能でインスタンス化できません

#Abstract-modified メソッドは、メソッド本体を持つことができない抽象メソッドです。サブクラスは、主にプロジェクトの仕様に使用されます。

はメソッドを定義します:

インターフェース インターフェース名 {インターフェース メンバー}

# インターフェースには変数を含めることはできません。使用できるのは定数とメソッドのみです

# メソッド(抽象メソッド) メソッド本体を持つことはできず、パブリックに変更できる

# インターフェイス

はクラス

によってのみ実装でき、クラスはインターフェイス

クラス class name はインターフェイス リストを実装します {// 実装 インターフェイス内のすべての抽象メソッド} // インターフェイスは複数の方法で実装できます

# インターフェイスはインターフェイスによって継承でき、クラスはインターフェイスのみを実装できますプロジェクトを標準化するには

Interface A extends B{ }

# 面接の質問

① PHP のクラスは複数のクラスを継承できますか? それをシミュレートする方法は?

PHP は多重継承をサポートしていませんが、連鎖継承によって実装できます クラスは複数のクラスを継承します

② 抽象クラスはクラスですか?

抽象クラスはクラスですか?クラスは通常のクラスが持つことができるすべての内容を持つことができ、また抽象メソッドを持つこともできます (メソッド本体のないメソッド)

③ インターフェースはクラスですか?

インターフェースはクラスではありません

④ インターフェースは継承できますか?

インターフェースは継承できません (インターフェースはクラスに継承できません。クラスでのみ実装できます)

インターフェイス インターフェイスによって継承可能: インターフェイス A は B(インターフェイス)

を拡張します。45. オーバーロード

オーバーロード: オブジェクト指向のオーバーロード、リロード。

: オーバーロードとは、同じ名前の複数のメソッドが存在できるようにするメソッドであり、パラメーター リストと戻り値が異なる場合があります。システムがメソッドを呼び出すと、パラメーターの型または番号に基づいて適切なメソッドが自動的に選択されます。 .

php

では、厳密な意味でのオーバーロードはサポートされていません: クラスまたはオブジェクトが存在しないプロパティまたはメソッドにアクセスする場合、または権限が不十分な場合、マジックは自動的にトリガーされます。メソッド。 属性のオーバーロード:

オブジェクトが存在しないプロパティ、または存在しないプロパティにアクセスするときに自動的に呼び出されるマジック メソッド。

__get

(取得する属性の名前)

__set

(設定する属性の名前、設定する属性の値)

デフォルトのオブジェクトは制限なく属性を追加できます: 追加された属性はすべて public

__isset

(必要な属性の名前)判定対象): 判定属性:

isset が外部で使用される場合、またはオブジェクトの属性 (存在しないまたは不十分な権限) を決定するために空の場合、メソッド

__unset

(削除する属性の名前): 属性の削除: オブジェクトの使用時。未設定の場合に自動的にトリガーされるマジック メソッド

が属性を削除します (許可なく、または存在しません)。存在しない、または不十分な権限にアクセスするときのメソッド

のオーバーロード

__call

(メソッド名、パラメータ配列): オブジェクトが存在しないメソッド、または権限が不十分なメソッドにアクセスしたときに自動的にトリガーされるメソッド。

__callStatic

(メソッド名、パラメータ配列):存在しない、または権限が不十分な静的メソッドにクラスがアクセスしたときに自動的にトリガーされるメソッド

オーバーロードの意味:

クラスが設計されている場合自分専用: オーバーロードしても意味がない(用事がなければ自分では使わない)

クラスを外部用に提供する必要がある場合(インターフェース): オーバーロードする必要がある

フォールトトレランス用、

システムエラー回避用

46. 名前空間

名前空間の定義

: 名前空間空間名、名前空間の親空間/子空間名

名前空間のメンバー

: クラス、関数、

定数 (const) [変数アクセスは名前空間によって制限されない] ネームスペースの意味:

メモリ内のファイルを分割します。複数の名前 (関数/クラス/定数) が存在する可能性があります。

の存在 ネームスペース アクセス:

相対パス: 修飾名アクセスと非修飾名アクセス

絶対パス: 完全修飾スペース アクセス

非修飾名アクセス

: を直接使用します。通常、現在のスペースのメソッド、定数、およびクラスがアクセスされます

限定された名前アクセス

: 限定された名前アクセスは、次の場合にのみ適用されます。現在の親スペースの下のサブスペースへのアクセス: 現在の親スペースで、サブスペースに下方向にアクセスします。 [サブスペースの名前空間メンバー]

完全修飾名アクセス:

絶対パス アクセス、スペース制限なし

名前空間の絶対パスのルート ディレクトリは: 🎜>

サブスペース。 :

指定された名前空間の下に複数のスペースを作成できます: すべてのスペースが作成されますルート ディレクトリから開始します。 名前空間 1/名前空間 2...;

スペースの導入:

ファイルのインクルードを使用して、導入しますが、スペースの導入後は使用できません。インポートされたファイルに名前空間がある場合、このスペースも導入されます。 インポートされたスペースへのアクセス: あなた

スペース要素の導入:

スペース要素の導入はクラスのみ導入可能 を使用可能

スペース名

クラス名 as エイリアス グローバルスペース : インポートされたファイルに名前空間がない場合グローバル空間へのアクセスは完全修飾形式 (絶対パス) でアクセスできます

47. シリアル化された ファイルは文字列型データのみを保存できますが、複合データは保存できません。データ型 (配列と文字列) __toString()

は String に変換できますが、オブジェクトは復元できないため、変換にはシリアライズとアンシリアライズが使用されます

注: オブジェクトを復元するときは、オブジェクトを復元するときにどのオブジェクトを実行するかを知るために、空のオブジェクトを定義する必要があります。 __autoload() を使用して必要なクラス名をロードできます。

リソース タイプを保存できません: __sleep( ) は、serialize() を監視するために使用されます。シリアル化するときに、オブジェクトが起動後に実行される操作を監視できるのは何ですか?

48. PDO

Phpdata オブジェクト: データベースを操作するための基本的なステートメントを PHP のオブジェクトにカプセル化し、さまざまなデータベースで操作できる拡張メカニズムです。

PDO:ポイント 3 つのカテゴリ

PDO 基本クラス: データベースの初期化と基本的な SQL 実行操作

PDOstatement クラス: データベース操作クラス: クエリと準備 (前処理)、結果処理など

PDOException クラス: エラー処理クラス

一般的に使用されるメソッド:

① DSN 経由で接続し、新しい PDO オブジェクト

② Exec は影響を受ける行の数を返します。通常は次のオプションとともに使用されます。 PDO::errorCode/PDO::errorInfo /PDO::lastInsertId()

③ Query($sql) PDOstatement クラスを取得し、結果セットを取得

④ PDOstatement::fetch( )結果セットを配列

に変換します。 49.

Mysql の前処理:

を事前に配置します。実行するSQL文はサーバに送信されますが、実行されません。実行する必要がある場合、実行命令を送信して初めて実行されます。

① 'SQL文から前処理名を用意します。実行される';【 パラメータの受け渡しにプレースホルダを使用可能 】

プレースホルダが複数ある場合、変数リストを順番に自動照合

② 前処理名を実行 [変数を使用して前処理名を実行] --データを直接使用することはできません】

前処理の意味:

データベースの最適化: SQL ステートメントが複雑だが繰り返しが多い場合、最初に複雑な SQL を変換できます。ステートメントはサーバーに送信されます: 簡単な実行命令が後で提供されます (帯域幅を削減するため)

前処理はセッション レベルです: 現在のユーザーの現在の接続は有効です (Apache、mysql の長い接続)

の PDO 前処理:

PDOstatement 値の受け渡し

PDOstatement::bindparam() 参照渡し

(値を外部から変更するには変数を渡す必要があります)

50. PDO トランザクション処理トランザクション処理: 複数の操作があります (書き込み操作) ) 同時に正常に実行する必要があるため、操作の各ステップをデータ テーブルに直接同期するのではなく、結果をトランザクション ログに一時的に保存する必要があります。最終結果は、すべて成功するか、すべて失敗します。

PDO

トランザクション処理

① オープン トランザクション処理: PDO::beginTransaction()② ロールバックポイントの設定: PDO::exec('savepoint sp1')

③ 判定結果の選択提出:

a) PDO::commit: データと同期table

b) PDO::rollback: クリア操作

PDO

属性処理:

両方 PDO

51、リフレクション52、セッション ストレージセッション メカニズムは session_set_save_handler (prama パラメーター) を通じて登録されます

登録マシンのパラメーター:

①文字列は関数を表し、配列の場合はarray('p1','p2')です

②p1が文字列の場合、p2は文字列 それからp1::p2()として使用します—p2メソッドを呼び出すp1クラス名

③P1がオブジェクトの場合、オブジェクトが自動的に認識されてp2メソッドを呼び出す

セッションストレージを書き換え中 セッションをドキュメントに保存する独自の仕組み

外部定義の open、close、read、write、gc、destroy 関数を使用してセッションの保存を実現します。

session_set_save_handler の使用順序に注意してください。 (open、close、read、write、gc、destroy)

データベースのフィールドは session_id、content、lose_time で構成されます

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。