ホームページ >バックエンド開発 >PHPチュートリアル >php_PHP チュートリアルの一般的な問題の概要
PHP開発でよくある疑問や小さな問題をまとめた記事です。
上記の機能の一部の違い
1.isset()とempty()の違い
どちらも変数のテストに使用されます。ただし、 isset() は変数に値が割り当てられているかどうかをテストし、 empty() は値が割り当てられている変数が空かどうかをテストします。 PHP で値を割り当てずに変数を参照する場合は許可されますが、注意事項が表示されます。変数に null 値、$foo=""、$foo=0、または $foo=false が割り当てられている場合、empty($foo) は true を返し、isset($foo) も true を返します。つまり、null 値を割り当てると、変数をログアウトしないでください。変数の登録を解除するには、unset($foo) または $foo=NULL を使用します。
2.エラーメッセージの表示方法
php.ini で display_errors = On および error_reporting = E_ALL を指定すると、すべてのエラーとプロンプトが表示されます。以前の PHP 記述方法を使用すると、エラー メッセージのほとんどが表示されます。未定義の変数についてです。変数に値が割り当てられる前に、変数が呼び出されるときにプロンプトが表示されます。解決策は、それを検出またはブロックすることです
。
3. 一重引用符と二重引用符の違いは何ですか?いつ使用しますか?
一重引用符では、変数 ($var) と特殊なエスケープ文字 (「t r n」など) は解析されないため、PHP の解析速度は速くなります。エスケープ文字は単一引用符の「'」と「" のみをサポートします。」引用符とバックスラッシュ自体のエスケープ。二重引用符内では変数 ($var) の値が文字列に置き換えられ、特殊なエスケープ文字も特定の単一文字に解析されます。また、上記の 2 つの特性を特に対象としたものもあります。 "$" や " などの特別な関数エスケープ。プログラミングはより便利ですが、PHP の解析も非常に遅くなります。配列内で添え字が整数ではなく文字列型である場合は、必ず一重引用符を使用してください。添え字を囲みます。 、正しい書き方は、$array[key] ではなく、$array['key'] です。間違った書き方をすると、PHP パーサーは key が定数であると判断し、まず定数が存在するかどうかを判断します。それ以外の場合は、のみを使用します。 "key" を式の添字として使用すると、エラー イベントがトリガーされて通知レベルのエラーが生成されるため、一重引用符が使用できるほとんどの状況では二重引用符を使用しないでください。
4.print、echo、print_rの違いは何ですか?いつ使用する必要がありますか?
Echo と print はどちらも出力を行うことができます。違いは、echo は関数ではなく戻り値がありませんが、print は戻り値のある関数であるため、相対的には echo を出力するだけの方が高速であり、print_r は通常、変数を出力するために使用され、デバッグでよく使用されます
5. PHP でリモート ファイルを開く必要がある場合があります
リモート ファイルを開く関数は次のとおりです: fopen(http://XXX.com/a.php)、fsockopen(http://XXX.com/a.php)、file_get_contents(http://XXX.com/a) .php ) など)
php5 および apache2.2.X 環境では、ファイル ストリームを開けず、http リクエストが失敗したことを示すメッセージが表示されます (ストリームを開けませんでした: HTTP リクエストが失敗しました!)
php.ini には 2 つのオプションがあります:
allow_url_fopen =on (URL を介してリモート ファイルを開くことができることを示します)、
user_agent=”PHP”(ネットワークにアクセスするためにどのスクリプトが使用されるかを示します。デフォルトでは、その前に「;」があります。削除してください。)
Apache サービスを再起動するだけです。
6. auto_increment の値を事前に取得するにはどうすればよいですか?
mysql_connect('localhost','root','root') または die('サーバーに接続できません');
mysql_select_db( ’test’);
$sql = “show create table id_user” //id_userd はテーブル名です
$query = mysql_query($sql);
$arr = mysql_fetch_array($query);
$b = strstr($arr[1],’AUTO_INCREMENT=’); // AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 を含む部分文字列を取得します )
$result = intval(substr($b,15)); //substr()は文字列の16番目から文字列を取得し、取得した文字列をint型に変換します
echo ‘value of AUTO_INCREMENT’ .$result; // 出力結果:次回データ挿入時のID値です
7. 顧客情報の取得に使用します
getenv(”REMOTE_ADDR”) は視聴者の IP を取得できます
getenv("HTTP_USER_AGENT") はブラウザのオペレーティング システムの種類とブラウザの種類を取得できます
getenv は $_ENV グローバル変数内のすべてを取得できます
print_r($_ENV)は色々な事が見れます
たとえば
echo getenv(ALLUSERSPROFILE); ALLUSERSPROFILE
の値が確認できます。
echo getenv(PATHEXT); PATHEXT
の値が確認できます。
8.mysql_fetch_row() と mysql_fetch_array() の違い
mysql_fetch_array() は mysql_fetch_row() の拡張バージョンです。データを数値インデックスとして配列に保存するだけでなく、フィールド名をキーとして使用して、データを連想インデックスとして保存することもできます。 mysql_fetch_array() を使用することは、mysql_fetch_row() を使用する場合よりも大幅に遅くならず、より多くの値も提供します。 mysql_fetch_array() のオプションの 2 番目のパラメータ result_type は、MYSQL_ASSOC、MYSQL_NUM、MYSQL_BOTH の値を受け入れることができる定数です。この機能は PHP 3.0.7 以降の新機能です。このパラメータのデフォルト値は MYSQL_BOTH です。
9. EODの使用法と効果
一重引用符や二重引用符よりも優れており、改行を含めることができます。 EOD は他の文字に変更できます。
10. gdate() を使用して長い数値文字列を通常の時間に変換するにはどうすればよいですか?
gmdate は GMT 時間を返します。それ以外の場合は、date() 関数とまったく同じです。現地時間が必要な場合は、date() を使用してタイムスタンプをフォーマットします。
11.正規表現の ()// の違いは何ですか?
/ / はパターン区切り文字であり、内部に規則的なルールがあることを意味します。
( ) はサブパターンを表します。 // には、1 2 または $1 $2 を使用して、前のサブパターンの値と一致させることができます。
12.require と require_once の違いは何ですか?
require を繰り返し呼び出すと、読み込むファイルが複数回ロードされます。require_once は、実際に何回呼び出したかに関係なく、1 回だけロードされ、主に複雑なファイルの包含関係に使用されます
たとえば、b には a が含まれ、c には a が含まれますが、同時に c にも b が含まれる場合、require を使用すると、a が 2 回読み込まれる可能性があります
。
13. 3 つの IP アドレスの取得の違いは何ですか?
$_SERVER['REMOTE_ADDR'];
$_SERVER['HTTP_CLIENT_IP'];
$_SERVER['HTTP_X_FORWARDED_FOR'];
$_SERVER['REMOTE_ADDR']; // アクセス者 (おそらくユーザー、おそらくプロキシ) IP
$_SERVER['HTTP_CLIENT_IP']; //エージェント側 (存在する可能性がありますが、偽造される可能性があります)
$_SERVER['HTTP_X_FORWARDED_FOR'] //ユーザーがプロキシとして使用する IP (存在するか、偽造される可能性があります)
14. $_GET と $_POST の違いは何ですか?
1: get メソッドは渡される値のサイズを制限します。ポストは渡される値のサイズを制限しません。
2: Get はサーバーからデータを取得するために使用され、Post はサーバーへのデータ転送に使用されます。
3: Get は、アクションが指す URL にフォーム内のデータを変数=値の形式で追加し、その 2 つを「?」で接続し、各変数を「&」で接続します。フォーム内のデータをアクションが指す URL に送信します。 データはフォームのデータ本体に配置され、対応する変数と値に従ってアクションが指す URL に渡されます。
4: Get は安全ではありません。送信プロセス中にデータが要求された URL に配置され、多くの既存のサーバー、プロキシ サーバー、またはユーザー エージェントが要求された URL をログ ファイルに記録してどこかに配置するためです。個人情報は第三者に見られる可能性があります。さらに、ユーザーは送信されたデータをブラウザ上で直接見ることもでき、一部の内部システム メッセージがユーザーの目の前に表示されます。すべての Post 操作はユーザーには表示されません。
15. クラス内の関数の前に public と private を追加できますが、関数ライブラリ内の関数の前に追加することはできません。
関数は自由にカスタマイズでき、public はパブリックに使用されるクラス属性オブジェクト、private は独立して使用されるクラス属性オブジェクトです。
クラスのパブリックまたはプライベートとは、メソッド (「メソッド」と呼ばれることに注意してください) がクラスに対してパブリックかプライベートかを指します。参照している関数ライブラリは「関数」のライブラリであり、クラス内のメソッドには属しません。クラスなので、その必要はありません。事前変更はできません。
16. ページの実行時間はどのように計算されますか?
コードをコピー | |||||||||||||||||||
$starttime = $mtime[1] + $mtime[0]; … … … $mtime =explode('', microtime()); $endtime = $mtime[1] + $mtime[0]; $usedtime = $endtime - $starttime; printf(" %0.4f s", $usedtime); |
コードは次のとおりです | コードをコピー |
printf ("Pi は: %.2fn n", M_PI); printf ("Pi も: %.3fn n", M_PI); printf ("Pi も: %.4fn n", M_PI); ?> | しかし、多くのプログラマーは、この関数をいくつかの変数値と関数の戻り値を表示するためにのみ使用します。 Printf() はデータを表示する前にデータを整形するため、速度が遅くなります。そのため、データを表示する場合にのみ print と echo を使用して高速化します。
PHP は弱い型指定言語であるため、使用する前に変数を定義する必要がありません。これはプログラミングに大きな利便性と柔軟性をもたらしますが、変数は実行時に、どのような型であるべきかを知っておく必要があります。それでも実際には特定の型 (さまざまな型) に対応します
は相互に自由に変換できます)、型のない変数は存在しません。 PHP がセマンティック エラーを検出できない可能性はありますが、変数の型の変更により、潜在的な問題が発生する可能性があります。注目に値するもう 1 つの問題は、変数のスコープです。これも を引き起こす可能性があります。
PHP には次の基本的な変数があります:
ブール値、リソース、整数、倍精度浮動小数点数、文字列、配列、オブジェクト。
3. 一時変数の使用
一時変数の乱用はプログラムの動作効率の低下につながります。一時変数をいつ使用するかは、次の 2 つの点に基づいて検討できます。
1. 変数が少なくとも 2 回使用されているかどうか。
2. この変数を使用すると、プログラムの可読性が大幅に向上するかどうか。
上記のいずれも満たされない場合、この変数の使用は省略されます。例:
コードは次のとおりです
$tmp = 日付 ("F d, h:i a"); $tmp を印刷します。 ?> | |||||||||||||||||||
日付を印刷 ("F d, h:i a");
?> 別の例: // 文字列 reverse_characters(string str) // 文字列内のすべての文字を反転します 関数 reverse_characters ($str) { return implode ("", array_reverse (preg_split("//", $str))); }
はあまり読みにくいので、次のように変更できます:
|