最近必要に迫られてPHPを触りはじめました。ゆくゆくはWordPressプラグインとか作れるようになりたいですね。

本題。

1

if ("1" == 1) {
    echo "ほげ" . PHP_EOL;
} else {
    echo "ふが" . PHP_EOL;
}

実行すると、「ほげ」と出力されます。

まあ、この程度であればよくある話ですよね。文字列と数値を比較したとき、勝手に文字列が数値に変換されるというのはよくある話です。JavaScriptとかもこういった仕様ですしね。
というか、そもそも文字列と数値を比較しないといけなくなるようなコードを書いてる時点で設計が間違ってますし。この部分が問題になることは少ないでしょう。
しかし、本当に怖いのはこれから。

2

if ("1" == "01") {
    echo "ほげ" . PHP_EOL;
} else {
    echo "ふが" . PHP_EOL;
}

これも実行すると「ほげ」と出力されます。

……
いや、お節介にも程があるだろ、この機能。
文字列と文字列の比較してるのに、何故か勝手に両辺を数値に変換してくれています。何というありがた迷惑……。

3

if ("10" == "010") {
    echo "ほげ" . PHP_EOL;
} else {
    echo "ふが" . PHP_EOL;
}

これも実行すると「ほげ」と出力されます。

一見、さっきのコードと変わらないように見えます。
しかし、同じことを文字列ではなく数値でやってみましょう。

if (10 == 010) {
    echo "ほげ" . PHP_EOL;
} else {
    echo "ふが" . PHP_EOL;
}

こちらは実行すると「ふが」と出力されます。

うんうん。頭に0つけると8進数に変換されるから、010 == 8 != 10なのは当たり前ですよね。これも他の言語でもよくある仕様です。
文字列の場合は基数変換されずに10進数でそのまま解釈されるようです。まあ、このあたりはギリギリ許容範囲かな?

4

if ("0x10" == "16") {
    echo "ほげ" . PHP_EOL;
} else {
    echo "ふが" . PHP_EOL;
}

実行結果: 「ほげ」

いやお前、さっきは基数変換しなかっただろ……?
何で16進数になった途端、待ってましたとばかりに基数変換してくるんだ……8進数でもやれよ……

結論

==演算子は使うな。