PHPBasics
PHPBasics は、おそらくあなたにとってすでに慣れ親しんでいる多くのことを指します:
?構文
?演算子
?変数
?定数
?制御構造
LanguageConstructs と関数
Magicconstants
__LINE__ ファイルの現在の行番号。__FILE__ ファイルのフルパスとファイル名。インクルード内で使用した場合は、インクルードされたファイルの名前が返されます。 PHP 4.0.2 以降、__FILE__ には常に絶対パスが含まれますが、古いバージョンでは状況によっては相対パスが含まれます。
__FUNCTION__ 関数名。(PHP 4.3.0 で追加) PHP 5 以降、この定数は宣言されたとおりの関数名を返します (大文字と小文字を区別)。 PHP 4 では、その値は常に小文字です。
__CLASS__ クラス名。 (PHP 4.3.0 で追加) PHP 5 以降、この定数は宣言されたとおりのクラス名を返します (大文字と小文字は区別されます)。 PHP 4 では、その値は常に小文字です。
__METHOD__ クラスメソッド名。(PHP 5.0.0 で追加) メソッド名は宣言されたとおりに返されます (大文字と小文字が区別されます)。
PHP 言語構造
「正確な」 「LanguageConstruct」の定義。
これは、次のような「コア言語定義」のようなものです。 if (...) while (...) など PHP では、多くの初心者が *THINK* と呼ぶいくつかの一般的な関数は、実際には言語構成要素です。require include echo isset それらのほとんどは、現在マニュアルにそのように文書化されていると思います。言語構造は、大まかに言語の「文法」に対応します。
これは、それらが関数によく似ていますが、「if」や演算子 +、* などと同様に、言語の不可欠な部分であることを意味します。これは、構文的には関数のように見えますが、マニュアルでは関数の下にリストされていますが、これは単にそれらを使いやすく、理解しやすく、ドキュメント内で見つけやすくするためであることを意味します。そのため、関数の特定のルールを緩和することができます。たとえば、引数を括弧で囲む必要がありますが、実際には必要ありませんが、通常の関数と同じ外観になるように括弧が必要です。
PHP タグ
長いタグ:
スクリプトスタイルタグ:
短いタグ: short_open_tag ディレクティブ inphp.ini
…?> ( echo $vars ?>;= $vars ?>)
ASP スタイル タグ: php.ini の asp_tags ディレクティブ
<% … %> (<% echo $vars %>;<%= $vars %>)
長いタグを除き、他のタグは優先されません。
試験問題:
. 使用すべきでない場合短いタグ? XMLでphpを使用する場合
「ショートタグ」の問題によりどのようなエラーが発生しましたか?
A. JavaScript ソース コードを出力します。
B.解析エラー: 構文エラー、予期せぬ $end in
長いまたは通常の PHP タグを使用して、構成オプションに関係なく、アプリケーションが複数のサーバー間で移植可能であることを確認してください。
コメント
// 単一行のコメント
# 単一行コメント
/*
複数行コメント
*/
.PHPdoc コメントスタイル
単一行コメントは改行文字または PHP 終了タグで終了するため、単一の like コメントlike
//このタグ ?> PHP コードを終了することができます
意図しない出力がある可能性があります
変数
PHP は大まかに型付けされています
スカラー: ブール、文字列、整数、浮動小数点数
複合: 配列、オブジェクト
特殊: リソース、null
ScalarTypes
Strings
PHP 内ではネイティブに各文字は 1 バイトで表されるため、PHP にはマルチバイト文字セット (Unicode など) のネイティブ サポートがありません
これは PHP6 で変更されます。
PHP に課せられた制限はありません使用できる文字列の長さです。
'' 一重引用符または文字列リテラル、一重引用符内の文字は、変数やエスケープ シーケンスが解釈および置換されることなく、そのまま記録されます。
“” 二重引用符、変数、およびエスケープ シーケンスは解釈されます。そして交換されました
<< Heredoc
heredoc 構文は二重引用符と同様の方法で機能しますが、複数の行にまたがるように設計されており、エスケープせずに引用符を使用できるように設計されています。 「犬!
泥棒に向かって走りながら
挨拶;
」
また、使用される識別子は、PHP の他のラベルと同じ命名規則に従う必要があります。英数字とアンダースコアのみを含める必要があり、数字以外の文字またはアンダースコアで始める必要があります。
次の点に注意することが非常に重要です。終了識別子を含む行には、セミコロン (;) を除く他の文字は含まれません。これは、特に、識別子がインデントされてはならず、セミコロンの前後にスペースやタブがあってはいけないことを意味します。また、closedidentifier の前の最初の文字は、オペレーティング システムで定義されている改行でなければならないことを認識することも重要です。これは、たとえば Macintosh では r です。終了区切り文字 (セミコロンが続く可能性があります) の後には改行も続ける必要があります。
クラスメンバーの初期化にヒアドキュメント構文を使用することはできません。代わりに他の文字列構文を使用してください。
Integer
0
0x
整数の最大サイズはプラットフォームに依存し、最大 ~20 億が一般的です。
Float (double)
Float または double は、実際に
大きな値または非常に小さな値を表すために使用できます。浮動小数点数は、いくつかの構文を介して改ざんされる可能性があります
$a = 1.234; //標準10進表記
$b = 1.2e3; //科学的記法 (1200)
$c = 7E-10;
//科学的記法 (0.0000000007)
? float のサイズはプラットフォームに依存しますが、精度は最大 ~1.8e308 です
数値表記の変換に関する質問に遭遇しました。でも比較的簡単です。デフォルトでは、php は 10 進数です。
Boolean
True、false、0、1…大文字と小文字を区別しない
CompoundTypes
Arrays
Arrayには、他の変数タイプの任意の組み合わせを含めることができます。配列またはオブジェクト。詳細については後の講義で説明します。
オブジェクト
オブジェクトにより、データとメソッドを 1 つのまとまった構造に組み合わせることができます。
詳細については後の講義で説明します。 source は次のことを表す特別な変数です。ある種のオペレーティング システム リソース、一般的には開いているファイルまたはデータベース接続です。
リソース型の変数は出力できますが、それらの唯一の賢明な使用法は、それらを操作するように設計された関数です。
Null
Anull 変数は、その点で特別です。値も型もありません。
Nulli は、整数 0 または長さ 0 の文字列 (型を持つもの) とは異なります
定数
定数を使用すると、通常は作成できない特別な識別子を作成できます作成後に変更するには、define() 関数を使用します。定数は一度設定すると変更できません。
define('username','bob');
VariableVariables
変数 変数は便利であると同時にわかりにくいです:
$a= 'name';
$$a= "ポール";
echo$name; //Paul
Variable
変数が役立つ状況はいくつかありますが、他のプログラマを簡単に混乱させる可能性があるため、使用には注意してください
演算子
?PHP はマルチオペレーターの数:
?代入
?論理
?算術
?文字列
?比較
?ビットごと
?その他
.値による代入と参照による代入
PHP5 の PassObjects 引数
UsingBitwise演算: &(and)、|(or)、^(XOR)、~(NOT)
>>(ShiftRight)、< 次の出力は次のとおりです。 ? 1&2? 2&7? 15&24? 1| 2? 16| 15? 8^6? 15^ 7
(
私たちの 8 ビット バイナリ世界のコンテキスト内で) の出力は何ですか:
?~254
? 4>> 2? 1? 5>> 2
?7<< 3
OtherOperators
@:次の式からのエラーを抑制します
``バッククォート: 内容をシェルコマンドとして実行します
(shell_exec()のショートカット).
Instanceof: 指定された変数の場合にtrueを返しますは、指定されたクラスのインスタンス、そのサブクラスの 1 つ、または指定されたインターフェイスです。
インスタンスは多少重要です。これに関する試験問題がいくつかあるためです。
ini_set("ERROR_LEVEL",E_STRICT);
$a= @myFunction();
functionmyFunction($a)
{
array_merge(array(),"");
}
$ls= `ls`;
$ a= 新しい stdClass;
if($a instanceof stdClass) { ... }
if($a !instanceof stdClass) { ... }
//ParseError
ControlStructures
If
?代替 * コードが読みやすくなります。
?Short ($express)?$var1:$var2
Switch
while
do
For
?Continue
?break
Foreach
Functions
?パラメータ
?オプション
?バイレフ
?バイヴァル
?オブジェクト
?変数関数
オブジェクト
後で!
if、while、do、for、foreach には代替構文を使用できます。{ と} を : と end(if、while、do など) に置き換えます。実際の例については、WordPress テーマ ファイルを確認してください。
$a= 0;
while($a++
{
echo$a;
}
echo$a;
return
実行を終了し、呼び出し元のスコープ、インクルードされたファイル内の関数 (呼び出し元のファイルに制御を返す) と関数/メソッドの内部から (呼び出し元のコードに制御を返す) の両方に制御を返します。
Exit
スクリプトの実行は、オプションでメッセージまたは終了ステータス (0-255) を返すことができます。
試験の質問:
PHP5 の終了スクリプト:
__halt_compiler() ;
die();
exit();
結論
?PHP タグ、使用ルールが異なる複数のタイプ (デフォルトでオン/オフになっているもの、保証されているものはどれ?)
?PHP は緩やかに型付けされていますが、内部で型付けが行われています。
?いくつかの仮定が行われます (8 進数形式)
?バイナリは面倒ですが、その
を使用します
? 制御構造には、一般的に使用される形式以外の形式があります
PHPFunctions
?可読性
?保守性
?コード分離
?モジュール性
機能?スコープ
これは、変数スコープに関連する機能をカバーするように拡張されるべきだと思います: スーパーグローバル、グローバル変数、ローカル変数、クラスメンバー(パブリック、プライベート、プロテクト、ファイナルなど)、定数、静的など
ただし、PHPの最後にはメモリが解放されます。すべてのページが読み込まれるため、静的変数であっても別の http リクエストにまたがることができます。そのため、Cookie とセッションが必要です。
global $id;
globals[‘id’];
試験には関数スコープを明確に理解する必要がある質問がいくつかあります。そして、値 Byref と Byval を渡します。
可変長引数リスト
関数ヘッダーで引数を指定する場合でも、可変長引数リストを使用できます。
func_get_args,func_num_args, func_get_arg
関数とオブジェクト、ついに友達
? PHP4 ではオブジェクトが ByVal に投げ込まれていましたが、これは、何も考えずにコピーを作成したことを意味します
? PHP5 では、オブジェクトは常に ByRef によって渡されます。明示的にクローンしない限り、それを保持しておいてください
心に留めておいてください。
結論
それらは非常に便利です
?スコープの仕組みを覚えておく必要があります
?トレースを練習してください
?オブジェクトは飛び回ります今すぐ参照してください
?Return ステートメントは関数内のどこにでも存在できます。複数のステートメントを持つこともできます
?同じ関数が何も返さない、または何かを返す状況を避けてください (Zend
Studio のコード アナライザーがこれをテストします)
関数が定義されると、PHP スコープが終了し、後で関数の残りの部分から再び再開されます。
「_」は有効な関数名ですか?
PHPArrays
列挙型配列、連想配列 (ハッシュ)、多次元配列
$a =array(5=>"b", 7, 9, "23" => 'c', 'j');
$b= array(1, 2, 3, 'f ', 'fred' => $a);値:
にアクセスするにはどうすればよいですか? 7 // $a[6];? ‘c’ // $a["23"];
? 'b' を配列 $b // $b['fred'][5]? ‘f’ // $b[3]
ArrayIteration:
foreach() を介して配列を反復処理するときは、配列のコピーに対して操作されることに注意してください。
内部配列ポインタを使用すると、この問題は発生しません。
ArrayIteration
?end() ?ポインタを最後の要素に移動します
?key() - 現在の位置からキーを取得します
?next() ? arraypointer を 1 つ進めてから
現在の値を返す
?prev() ?配列ポインタを 1 つ巻き戻してから
現在の値を返します
?reset() ?配列ポインタを
thearray
?each() の先頭にリセットします。
Internalarray ポインターはリセットできますが、単独でリセットしないでください。
Foreach()
InPHP 5 つの項目は、単に値ではなく参照によって反復処理できます。
foreach($arrayAS &$value) { … }
これはおそらく検査されるでしょう!
いくつかの配列関数:
.sort()
この関数は配列をソートします。この関数が完了すると、要素は下位から上位に配置されます。
この関数は、配列内の要素に新しいキーを割り当てます。単にキーを並べ替えるのではなく、割り当てた既存のキーを削除します。
.Ksort()
キーとデータの相関関係を維持しながら、キーごとに配列を並べ替えます。これは主に連想配列に役立ちます。
.asort()
配列を並べ替えてインデックスの関連付けを維持します
array_push() array_unshift()
array_pop() array_shift()
非連想配列の文字列はデータのキーとして使用され、キーには数字のみが含まれます
array_keys() &array_values()
bool array_walk ( array &$array, callback$funcname [,mixed $userdata] )
ユーザー定義の functionfuncname を配列 array の各要素に適用します。通常、funcname は 2 つのパラメータを取ります。配列パラメータの値が最初で、キー/インデックスが 2 番目です。オプションの userdata パラメーターが指定された場合、それは callbackfuncname の 3 番目のパラメーターとして渡されます。
array_change_key_case()
入力からのすべてのキーを小文字または大文字で含む配列を返します。番号付きインデックスはそのまま残ります。
array_merge()
array_merge() を使用して配列をマージできます。異なる連想配列に重複キーがある場合、右端の配列の値が優先されます。
配列のチャンクを切り出します
は、1 つ以上の配列の要素をマージして、1 つの配列の値が前の配列の末尾に追加されるようにします。結果の配列を返します。