Hello World ハローワールド とは、画面に「Hello World!」と表示するプログラミングの本の最初に書いてあるプログラムです。
PHPのHello Worldプログラムは次のようになります。
hello1.php:
Hello World!
上記のコードをテキストエディタで書いて hello1.php の名前で保存します。
これを、ウェブサーバー（CGI/MPM/FastCGIなどでPHPのスクリプトが実行可能にセットアップされているとします）にアップロードし、アップロードされたスクリプトをウェブブラウザで開くと
ウェブブラウザーでの表示:
Hello World!
と表示されます。
あるいは、コマンドラインから
コマンドラインでの操作と表示:
% cat hello1.php
Hello World!
% php hello1.php 
Hello World!
% _
のように実行することができます。
と思った方もおられると思いますが、PHPはHTML（などのテキスト）に様々な処理を加えることで機能する「埋込み型言語」なので、地のテキストをそのまま表示するのはPHPの大事な機能です。
２例目
hello2.php:
大概の人が思い描く「PHPで書かれたHellow Worldプログラム」はこれだと思います。
PHPのプログラムは、地のテキストの中に （開始タグ） から?>（終了タグ）の間（PHPタグ）に書きます[https://www.php.net/manual/ja/language.basic-syntax.phptags.php PHPタグ]。
この例では、echo "Hello World!"、がプログラム本体で echo コマンドに文字列リテラル "Hello World!" を渡しています。
echo コマンドは、受け取ったパラメーターを表示するコマンドです。
PHP_EOLは、改行文字を表す定数で、オペレーションシステムによって異なる改行文字の違いを吸収します。
３例目
hello3.php:
はの短縮形式です。
４例目
hello4.php:
 17) : ?>
こんばんは。
おはようございます。
こんにちは。
実行結果（０時から６時までと１７時から２４時まで）:
こんばんは。
実行結果（６時から１０時まで）:
おはようございます。
実行結果（１０時から１７時まで）:
こんにちは。
動的要素がないとPHPを使う意味はないので、時刻から、「おはようございます。」「こんにちは。」「こんばんは。」を切り替えるスクリプトを書きました。
PHPタグは、１つのプログラムの中で複数回使うことができ、if 文や foreach 文 は複数のブロックに別れて書かれることがあります。
ウェブサーバー（たとえばapacheなど）あるいはコマンドラインから php にスクリプトを与え実行すると、HTMLに埋込まれた  から ?>のPHPの疑似タグの間のコードがPHPインタープリターに解釈され、地のHTMLに展開されます。
[https://paiza.io/projects/Qfl2J1yiog9zVWbAT-PUBA?language=php hello.php]:
こんにちは
実行結果:
こんにちは
        Hello World! 
        こんにちは
echo コマンドは、print コマンドと似ていますが、２つ以上のパラメーターを取れるところが違います。
はの短縮構文です。
PHPでは、動的に文字列をHTMLをに埋込むことができます。
埋込まれたPHPのコードがどこに展開されるか見てみましょう。
[https://paiza.io/projects/g7vgu7WSRHltbBvJVgr_ow?language=php hello2.php]:
こんにちは こんにちは
ここは、phpタグの外です。";
	echo "Hello World!", "";
	echo "こんにちは", "";	
?>phpタグを脱出。
    
実行結果:
こんにちは こんにちは
ここは、phpタグの外です。ここからphpタグ内側Hello World!こんにちはphpタグを脱出。
    
レンダリング結果
ここは、phpタグの外です。ここからphpタグ内側Hello World!こんにちはphpタグを脱出。
  
PHPには、echoとprintと２つの標準出力に表示する機能がありますが、この２つの立ち位置は大きく違います。
のように、echo（の短縮構文）とsprintf() を組合わせると出力位置の把握が容易になります。
PHPタグには、２つの短縮形式があります。
echo 文の短縮形式
      ⇓
php開始タグの短縮形式
      ⇓
「echo 文の短縮形式」は可読性が高く副作用もないので、積極的に使うべきです。
これに対し「php開始タグの短縮形式」は
と構文が衝突します。
このため php.ini で short_open_tag = Off として「php開始タグの短縮形式」の使用を禁止することができます。
% php -r 'echo phpinfo();' | grep 'Loaded Configuration File'
Loaded Configuration File => /usr/local/etc/php.ini
% _
で確認できます。
PHPは、ただ単純にHTMLに文字列を埋め込めるだけでなく、ループで繰返し構造をHTMLに展開できます。
[https://paiza.io/projects/OdhG5vAzhZgCSDkdcQcNhg?language=php loop.php]:
シンプルなループ
実行結果:
シンプルなループ
1
4
9
16
25
36
49
64
81
100
レンダリング結果
1
4
9
16
25
36
49
64
81
100
foreach()は繰返し構文で、range(1, 10)は 1 から 10 の数列を返します。そしてこれが、変数 $i に順に入り繰返します。
ループ文の開始の { が閉じられていないことに注意してください。
の外の繰返しは、PHPのコードではなくHTMLのコードが丸ごと繰り返されます。
この場合は、I要素が量産されます。
量産されるI要素の内容にPHPのコードがあり変数を含む式が書かれています。
は、 の短縮形です。
echo コマンドは、 ’,’（カンマ）で区切って複数の式を続けて表示することができます。
これにたいし、print コマンドは、単一の式しか受付けらません。
9行目の {は、ここで閉じられています。
foreach の終わりを endforeach と書く代替構文があり、入組んだ構造のときにループの範囲を見失うリスクを下げることができます（: を忘れがち）。
TABLE要素を使った表組みなどの複合的な構造も、このようにHTMLとPHPのコードが出たり入ったりしながら、編み込むようにコード化します。
WordPressのテーマなどで、より複雑なPHPの（DOMとはまた違った）ドキュメント構造のデザインワークを見ることができます。
このように、PHPはテンプレート記述言語としての特徴を強く持っており、類似のものにはePerl や eRuby のようなスクリプト言語のテンプレート記述拡張がありますが、最初からテンプレート記述言語として設計されているスクリプト言語は、PHP以外に普及例は見当たりません。
PHPのコメントには３種類あります。
[https://paiza.io/projects/5wTgfL6I4G_b00Ea6NP5Eg?language=php 例]:
実行結果:
Hello World
コメントは、プログラムのデータやロジックに影響を与えず、自由な文書をプログラムに含めることができます。
コメントには、なにを書いてもいいのですが、プログラムのロジックをそのまま記すのは、冗長であるうえにコードの変更にコメントが追従せずズレが生じる原因になります。
次のような要素がコメントによく書かれます
PHPDocは、PHPプログラムのドキュメントを自動的に生成するためのドキュメンテーションシステムです。PHPDocを使用することで、クラス、メソッド、関数、および変数の説明を含む網羅的なドキュメンテーションを作成することができます。このドキュメントを使用することで、他のプログラマーがコードを理解しやすくなり、プログラムの開発プロセスが簡単になるとともに、コードの保守性も向上します。CoCalcを使用してPHPDocを作成するには、PHPDocをインストールし、適切なコマンドを実行して、必要なPHPファイルに注釈を追加する必要があります。
PHPDocは、PHPのドキュメント生成ツールで、コメントを用いて関数や変数の説明を記述するための構文です。
以下は、一般的なPHPDocの構文の例です。
/**
 * 関数の説明
 *
 * @param  タイプ  $引数名  引数の説明
 * @return タイプ         戻り値の説明
 */
function 関数名($引数名)
{
    // 関数の処理
}
上記の例では、以下のような要素が含まれています。
/** と */ で囲まれたコメントがPHPDocの開始と終了を表します。
* の後に、関数の説明文が続きます。
@param は、関数の引数の説明を示すタグです。第一引数には、引数の型、第二引数には、引数の名前、第三引数には、引数の説明を記述します。
@return は、関数の戻り値の説明を示すタグです。引数には、戻り値の型と説明を記述します。
1から100までの素数を表示
使用されたアルゴリズムは比較的単純で、2から100までの各整数が素数かどうかを一つずつ調べる方法です。 このアルゴリズムは ''O''(''n''2) の時間複雑度を持ちますが、入力範囲が固定された小規模な課題ではうまく機能します。 また、このコードには PHPdoc 形式のドキュメンテーションが含まれており、getPrimes関数の動作について記述されています。
複素数クラス
/**
 * 複素数クラス
 */
class ComplexNumber {
  
  /** @var float 実数部 */
  private $real;
  
  /** @var float 虚数部 */
  private $imaginary;
  
  /**
   * コンストラクタ
   * @param float $real 実数部
   * @param float $imaginary 虚数部
   */
  public function __construct($real, $imaginary) {
    $this->real = $real;
    $this->imaginary = $imaginary;
  }
  
  /**
   * 実数部を取得する
   * @return float 実数部
   */
  public function getReal() {
    return $this->real;
  }
  
  /**
   * 虚数部を取得する
   * @return float 虚数部
   */
  public function getImaginary() {
    return $this->imaginary;
  }
  
  /**
   * 複素数の加算を行う
   * @param ComplexNumber $number 加算する複素数
   * @return ComplexNumber 計算結果の複素数
   */
  public function add($number) {
    $real = $this->real + $number->getReal();
    $imaginary = $this->imaginary + $number->getImaginary();
    return new ComplexNumber($real, $imaginary);
  }
  
  /**
   * 複素数の減算を行う
   * @param ComplexNumber $number 減算する複素数
   * @return ComplexNumber 計算結果の複素数
   */
  public function subtract($number) {
    $real = $this->real - $number->getReal();
    $imaginary = $this->imaginary - $number->getImaginary();
    return new ComplexNumber($real, $imaginary);
  }
  
  /**
   * 複素数の乗算を行う
   * @param ComplexNumber $number 乗算する複素数
   * @return ComplexNumber 計算結果の複素数
   */
  public function multiply($number) {
    $real = $this->real * $number->getReal() - $this->imaginary * $number->getImaginary();
    $imaginary = $this->real * $number->getImaginary() + $this->imaginary * $number->getReal();
    return new ComplexNumber($real, $imaginary);
  }
  
  /**
   * 複素数の除算を行う
   * @param ComplexNumber $number 除算する複素数
   * @return ComplexNumber 計算結果の複素数
   */
  public function divide($number) {
    $denominator = pow($number->getReal(), 2) + pow($number->getImaginary(), 2);
    $real = ($this->real * $number->getReal() + $this->imaginary * $number->getImaginary()) / $denominator;
    $imaginary = ($this->imaginary * $number->getReal() - $this->real * $number->getImaginary()) / $denominator;
    return new ComplexNumber($real, $imaginary);
  }
  
  /**
   * 複素数の絶対値を取得する
   * @return float 絶対値
   */
  public function getAbsoluteValue() {
    return hypot($this->real, $this->imaginary);
  }
}
上記のように、各メソッドに対してPHPdocを記述することで、ドキュメンテーションを行うことができます。