優秀なPHP開発者が答えるべき質問 [終了しました]
質問
私は 優秀な .Net 開発者なら誰でも答えられるはずの質問 を読んでいて、この質問の内容とアプローチに非常に感銘を受けたので、同じ精神で、私はPHP開発者のためにこの質問をしています。
どのような質問 はどうあるべきだと思いますか? PHPプログラマは答えることができるでしょうか?
EDIT : この質問はユーザー固有ではなく、プログラミングコミュニティ全体に役立つことを目的としているため、私はこの質問をコミュニティWikiとしてマークしています。
いくつかの素晴らしい回答を期待しています。
注意 : 人々が言語に関しても何か新しいことを学ぶことができるように、コメントで提案された質問にも答えてください。
どのように解決するのですか?
確かに、私はこの質問をどこかから盗んできたのですが(もうどこで読んだか覚えていません)、面白いと思ったのです。
Q:
とは何ですか?
T_PAAMAYIM_NEKUDOTAYIM
?
A:
スコープ解決演算子(ダブルコロン)です。
経験豊富なPHP開発者は、この演算子が何を意味するのかすぐにわかるでしょう。 経験の浅い (そしてヘブライ語ではない) 開発者は この .
しかし、今はもっと深刻な問題があります。
Q:
この警告: 'Warning: Cannot modify header information - headers already sent', and what is a good practice to prevent it?
A:
原因
ボディデータが送信されたため、ヘッダも送信されてしまいました。
防止策です。
ボディデータを出力する前に、必ずヘッダー固有のコードを先に実行してください。誤って空白や他の文字を送信していないことを確認してください。
Q:
このクエリのどこが問題なのでしょうか。
"SELECT * FROM table WHERE id = $_POST[ 'id' ]"
?
A:
1.
SQLインジェクションの危険性があります。ユーザー入力を直接クエリで使用しないでください。最初にサニタイズしてください。プリペアドステートメント (
PDO
)
2.
すべてのカラムを選択するのではなく(*)、1つ1つのカラムを指定します。これは、たとえば、将来のある時点で BLOB カラムが追加されたときに、クエリがメモリを占有するのを防ぐための主な理由です。
Q:
このif文のどこが問題なのでしょうか。
if( !strpos( $haystack, $needle ) ...
?
A:
strpos
は、最初に$needleを見つけた場所のインデックス位置を返します。
0
. ということは
0
にも解決されます。
false
を解決するには、厳密な比較を使用することです。
if( false !== strpos( $haystack, $needle )...
Q:
このif文はどのように書くのが好ましいですか?
if( 5 == $someVar )
または
if( $someVar == 5 )
A:
前者は、2つの等号を使い忘れたときに、誤って$someVarに5を代入することを防ぐためです(
$someVar = 5
) を忘れてもエラーになりますが、後者はそうなりません。
Q: このコードから
function doSomething( &$arg )
{
$return = $arg;
$arg += 1;
return $return;
}
$a = 3;
$b = doSomething( $a );
...の値は何ですか?
$a
と
$b
という関数呼び出しの後、なぜ?
A:
$a
は
4
であり
$b
は
3
. 前者は$argが参照渡しであるため、後者は関数の戻り値が引数の初期値のコピー(参照ではない)であるためです。
OOP特有の
Q:
とはどのような違いがあるのでしょうか?
public
,
protected
と
private
をクラス定義に含めることはできますか?
A:
public
は、クラスのメンバーを "誰でも" 利用できるようにします。
protected
は自分自身と派生クラスのみがクラスメンバを利用できるようにします。
private
はそのクラス自身だけがそのクラスのメンバを利用できるようにします。
Q: このコードのどこが問題なのでしょうか。
class SomeClass
{
protected $_someMember;
public function __construct()
{
$this->_someMember = 1;
}
public static function getSomethingStatic()
{
return $this->_someMember * 5; // here's the catch
}
}
A: 静的メソッドはクラスをインスタンス化せずに実行できるため、$thisにアクセスすることはできません。
Q:
インターフェースと抽象クラスの違いは何ですか?
A:
インターフェースは、実装クラスとそのインターフェースを呼び出すオブジェクトとの間の契約を定義します。抽象クラスは、それを継承するクラスに対して、ある種の振る舞いをあらかじめ定義しています。これは、あるメソッドが存在することを保証しているため、ある程度は契約とみなすことができます。
Q:
実際に動作を実行するメソッドを持たず、内部メンバーに直接マッピングするゲッターとセッターを主に定義するクラスの何が問題なのでしょうか?
A: オブジェクトは他の用途はあまりなく、組み込まれた配列として機能するので、これはコード臭かもしれません。
Q:
なぜPHPはインターフェースの使用に関する実装が最適ではないのでしょうか?
A:
PHPはメソッドの戻り値の型を定義することができないので、基本的にインターフェースはかなり役に立ちません。
関連
-
[解決済み】XAMPPポート80をPID 4の「Unable to open process」が使用中 [重複] XAMPPポート80をPID 4の「Unable to open process」が使用中。]
-
[解決済み] [Solved] Fatal error: メンバ関数prepare()のNULLでの呼び出し
-
[解決済み】変な電話番号を生成するフェイカー?
-
[解決済み】 PHP 未定義関数の呼び出し
-
[解決済み】ディレクトリ内のファイル数を数える PHP
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
thinkphp5 timestamp 非整形の数値に遭遇した。
-
phpのAllowed memory size of 134217728 bytes枯渇問題の解決法
-
[解決済み】Wordpressの子テーマのstyle.cssが効かない。
-
[解決済み] PHP の文字列からアクセント記号を取り除くにはどうしたらよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given [重複] PHP & MySQL: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given.
-
[解決済み】「初期通信パケットの読み込み」でMySQLサーバーに接続できなくなり、システムエラーになる。0
-
[解決済み】DateTimeクラスのオブジェクトを文字列に変換できない
-
[解決済み】PHP フェイタルエラー。未定義の関数mssql_connect()をコールしています。
-
[解決済み] 警告:mysqli_fetch_array()は、パラメータ1がmysqli_resultであることを期待する、オブジェクトはで指定された。
-
[解決済み】PDOException SQLSTATE[HY000] [2002] そのようなファイルまたはディレクトリがありません。
-
[解決済み】/var/www/htmlとは何ですか?[クローズド]
-
[解決済み] Uncaught SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】phpのシンタックスエラー、予期しないT_IFエラーを修正する方法は?[クローズド]。
-
[解決済み】優れた.NET開発者なら答えられるはずの質問?[クローズド]