Menu

PHPとPythonの違い:文法・Web開発・どっちを学ぶべきか

PHPはWebのために作られた言語で、リクエストごとにファイルが実行されてページを出力し、WordPressやLaravelを支えています。Pythonは汎用言語で、Web開発(Django、Flask)もこなしつつ、データサイエンス、自動化、機械学習で主流です。

このページのコードはエディタで実行できます - 編集してすぐに結果を確認できます。

PHPとPythonはどちらも動的なインタプリタ言語ですが、育ってきた目的が違います。PHPはWebのために作られました。リクエストごとに.phpファイルが実行されてページを出力し、WordPressやLaravelを支えています。Pythonは汎用言語で、Webサイトも動かせますが(Django、Flask)、データサイエンス、スクリプト、機械学習では定番です。WebサイトやWordPressの仕事ならPHPが近道で、それ以外のほとんどではPythonのほうがよく選ばれます。

いちばん手早い比較方法は、同じプログラムを両方で書くことです。まずはPHPの小さなスクリプトで、実行できます。

同じプログラムをPythonで書くと次のようになります。

scores = {"Ada": 92, "Linus": 78, "Grace": 85}

for name, score in scores.items():
    grade = "pass" if score >= 80 else "retry"
    print(f"{name}: {score} ({grade})")

average = sum(scores.values()) / len(scores)
print(f"Average: {round(average, 1)}")

ロジックはまったく同じです。目に見える違いは文法で、PHPは変数に$を付け、文を;で終え、ブロックに波括弧を使います。Pythonはインデントを使い、記号を付けません。

文法を並べて比較

処理PHPPython
変数$count = 5;count = 5
文字列の連結"Hi " . $name"Hi " + name
変数の埋め込み"Hi $name"f"Hi {name}"
リスト[1, 2, 3][1, 2, 3]
キーと値のマップ["a" => 1]{"a": 1}
長さcount($list), strlen($s)len(list), len(s)
マップのループforeach ($m as $k => $v)for k, v in m.items():
関数function add($a, $b) { return $a + $b; }def add(a, b): return a + b
無名関数fn($x) => $x * 2lambda x: x * 2
キーがないときの既定値$m["k"] ?? "default"m.get("k", "default")
厳密な比較=====(型の自動変換なし)

配列:PHPは1つの型、Pythonはlistとdict

Pythonはlist、dict、tuple、setを区別します。PHPには配列という1つの型しかなく、順序付きのマップがこれらすべての役割を果たします。キーは整数でも文字列でもよく、追加した順番が保たれます。

Pythonでは2つの異なる型が必要です。

colors = ["red", "green", "blue"]
codes = {"red": "#f00", "blue": "#00f"}

colors.append("yellow")
codes["green"] = "#0f0"

print("blue" in colors)
print("red" in codes)

PHPの型が1つというのは便利ですが、Pythonにはない落とし穴が1つあります。array_filterのような関数は元のキーを保つので、絞り込んだリストに欠番(0, 2, 3)ができることがあります。番号を振り直すには、結果をarray_values()で包みます。

型と型の自動変換

どちらの言語も動的型付けで、どちらも型ヒントを書けます。大きな違いは、型が混ざったときの挙動です。Pythonは文字列と数値の足し算を拒否しますが、PHPは数値の文字列を自動で変換します。

print("10" + 5)   # TypeError: can only concatenate str (not "int") to str
print(7 / 2)      # 3.5
print(7 // 2)     # 3

PHP 8で文字列と数値の比較はずっとまともになりましたが、身につけるべき習慣は同じです。変換させたいのでなければ、PHPでは===を使います。ファイルの先頭にdeclare(strict_types=1);を書くと、PHPは型付きの関数パラメーターに間違ったスカラー型が渡されたときも拒否するようになり、Pythonの型チェッカーの挙動に近づきます。

Web開発

ここが2つの言語でいちばん違うところです。PHPファイルはそのままでWebページです。サーバーに置けば、リクエストのたびに先頭から実行され、フォームのデータはすでに$_GETと$_POSTに入っています。このブロックを実行し、都市名を入力してSendを押すと、$_POSTに値が入った状態でスクリプトがもう一度実行されます。

Pythonで同じページを作るには、フレームワークと起動中のアプリケーションサーバーが必要です。最小限のFlask版は次のとおりです。

from flask import Flask, request
from markupsafe import escape

app = Flask(__name__)

@app.route("/", methods=["GET", "POST"])
def home():
    city = request.form.get("city", "").strip()
    page = '<form method="post"><input name="city"><button>Send</button></form>'
    if city:
        page += f"<p>Weather lookup for <strong>{escape(city)}</strong></p>"
    return page

どちらのモデルが全般的に優れているということはありません。PHPの「1リクエストにつき1回まっさらな実行」はデプロイが簡単で壊れにくく、クラッシュしても影響は1つのリクエストだけで、メモリはページごとに片付けられます。Pythonの常駐するアプリプロセスは、リクエストの間でメモリに情報を保持でき、WebSocketやバックグラウンド処理に向いていますが、準備に手間がかかります。フルスタックのフレームワーク(PHPのLaravelとSymfony、PythonのDjango)は、結局ルーティング、ORM、テンプレート、認証、キューといった似た機能を備えています。

パフォーマンス

Webページでは、OPcacheを使ったPHP 8は素のコードの実行でたいていCPythonより速く、PHP 8にはJITコンパイラも入っています。実際にはどちらも、リクエスト中の時間の大半をデータベースやほかのサービスの待ちに使うので、この差でプロジェクトが決まることはまれです。Pythonの速度事情は別で、重い数値計算はコアがCで書かれたNumPyやpandasなどのライブラリが担います。インタプリタが遅くてもPythonがデータ分野で主流なのはこのためです。

それぞれが使われている分野

PHPが強い分野Pythonが強い分野
WordPressのサイト、テーマ、プラグインデータ分析(pandas、Jupyter)
LaravelとSymfonyのWebアプリ機械学習とAI(PyTorch、scikit-learn)
ECサイト:WooCommerce、Magento、Shopware自動化とスクリプト
安価なレンタルサーバー、制作会社、フリーランスのサイト科学技術計算、教育
サーバーで描画するページとAPIDjango、Flask、FastAPIによるWebバックエンド

求人市場もこれを反映しています。PHPの仕事はほとんどがWeb開発で、WordPressやLaravelが多めです。Pythonの仕事はWeb、データ、DevOps、MLにまたがるので、数が多くなります。

どちらを先に学ぶか

これから数か月で何を作りたいかで選びましょう。

  • Webサイトを作りたい、フリーランスで働きたい、WordPressの仕事をしたい: PHPを学びましょう。すぐにページを公開でき、スキルがそのまま報酬のある仕事につながります。まずはPHPとはと変数から始めてください。
  • データ分析、自動化、AIをやりたい、または汎用的な最初の言語がほしい: Pythonを学びましょう。
  • モダンなWebアプリを端から端まで作りたい: バックエンドはどちらでもよく、ブラウザ側にはいずれにせよJavaScriptが必要です。PHPとJavaScriptの違いを参照してください。

学んだことの大部分は移せます。ループ、関数、配列とマップ、クラス、例外はどちらでもほぼ同じように動くので、2つ目の言語は数か月ではなく数週間で身につきます。

よくある質問

PHPはPythonより速いですか?

一般的なWebリクエストでは、OPcacheと高速なエンジンのおかげで、PHP 8はたいていCPythonより速く動きます。ただしどちらも十分速いので、応答時間のほとんどはデータベースとネットワークで決まります。数値計算では、PythonはふつうNumPyのようなCで書かれたライブラリに処理を任せます。

PHPとPython、どちらを先に学ぶべきですか?

汎用的なプログラミング、データ分析、自動化、機械学習をやりたいならPythonから。Webサイト、WordPressの仕事、Laravelのアプリが目標ならPHPからです。PHPならほぼどのレンタルサーバーでも動くページを作って公開できます。

Web開発でPythonはPHPの代わりになりますか?

なります。Django、Flask、FastAPIで同じ種類のサイトやAPIを作れます。違いはデプロイとエコシステムです。PHPはほぼすべてのレンタルサーバーで動き、WordPressがあります。PythonのWebアプリは、ふつうプロキシの裏で常駐するアプリサーバーとして動きます。

Pythonの辞書にあたるPHPのものは何ですか?

連想配列です:$user = ['name' => 'Ada', 'age' => 36];と$user['name']。PHPの配列は順序付きのマップなので、同じ型がPythonのlistとdictの両方の役割を果たします。

Coddyのプログラミング言語のイラスト

Coddyでコードを学ぼう

始める