スタートページJavascriptReact
PHPの概要文法の基本(1) ←文法の基本(2)PHPの文法 →文法の基本(3)

PHP文法の基本(2)PHPの文法


PHPは、膨大な文法体系になっています。
参照: php.net「言語リファレンス」 https://www.php.net/manual/ja/langref.php
また、豊富な公開ライブラリがあります。
参照: アトオシ「PHPのおすすめライブラリ5選を一覧紹介!インストール方法も解説」 https://itpropartners.com/blog/525/


ここでは、paiza.io 環境で、簡単なPHPプログラムを作成するための基本的な文法に限定します。
PHPでJavaScriptと同じような処理をする場合、PHPの文法はJavaScriptとほぼ同じです。

変数

スカラー

変数名は、「$変数 = 10;」のように先頭に $ を付けます。

定数

JavaScript での const にように定数を宣言するには、二つの形式があります。
  const 定数 = 3,14; // $を付けない
  define("定数". 3.14);

配列

JavaScript と同じ
  $配列 = ["A", "B", "C"];
  $配列 = array("A", "B", "C");
   $配列[0] は "A"

配列の長さは。$配列.length ではなく、couunt($配列)を用います。これは連想配列でも同じです。

連想配列(Object)

JavaScript と同じ
  $連想配列 = array(
    "イヌ" => "dog".
    "ネコ" => "cat"
  }
   $連想配列["イヌ"] は "dog"

演算子

JavaScript と同じ
  +, -, *, /, %
  ==. ===. !=. !==, >, >=. <. <=. <>
  &&. ||. !

制御構造

次の制御構造は。JavaScript と同じ文法です。break や continue も使えます。

ユーザ定義関数

形式は、JavaScript とほぼ同じです。関数名には $ を付けません。

引数なし。returnなし

<?php
  function 関数(){
    echo "こんにちは";
  }
  関数();
?>

引数あり。returnなし

<?php
  function 関数($引数){
    echo $引数;
  }
  関数("こんにちは");
?>

引数なし。returnあり

<?php
  function 関数(){
    $文字列 = "こんにちは";
    return $文字列;
  }
  $戻り値 = 関数();
  echo $戻り値;
?>

引数あり。returnあり

<?php
  function 関数 ($引数) {
     $文字列 = "こんにちは  $引数 さん";
     return $文字列;
  }
  $戻り値 = 関数("田中");
  echo $戻り値;
?>

配列とforeach

<?php
  function 関数 ($配列引数) {
    foreach($配列引数 as $要素) {
      echo $要素."<br/>";
    }
  }
  $配列 = array('A','B','C');
  関数($配列);
?>

関数に変数名を付けることができます。

<?php
  function 関数(){
    return "こんにちは";
  }
  $変数 = 関数();
  echo $変数;
?>
  
<?php
  function 関数($引数){
    echo $引数;
  }
  $変数 = 関数("こんばんは");
  echo $変数;
?>

<?php ~ ?> の外部からの呼出し

ここまでの例は、関数を定義した <?php ~ ?> 内部からの呼出しでしたが、他の<?php ~ ?> から呼び出すこともできます。

<?php
  function 関数(){
    return"こんにちは";
  }
?>
<?php echo 関数(); ?>
  
<?php
  function 関数($引数){
    echo $引数;
  }
?>
<?php echo 関数("こんばんは"); ?>

上の2つを組み合わせることもできます。

<?php
  function 関数($引数){
    echo $引数;
  }
?>
<?php
  $挨拶 = "こんばんは";
  $変数 = 関数($挨拶);
  echo $変数;
?>

PHP独自の文法

<?php ~ ?>

この間が、PHPのプログラムであることを示します。
一つのファイルに複数の <?php ~ ?> があってもかまいません。

<?php echo "<p>PHPからの出力(前)</p>" ?>
<p>HTMLからの出力</p>
<?php echo "<p>PHPからの出力(後)</p>" ?>

echo

echo 文字列

標準出力域に 文字列 を表示します。この 文字列 は、以下のように編集できます。
<p>文字列<p> のように、HTMLタグを付加できます。

改行

「echo $配列」は不可

echo の対象となるのはスカラー要素(の並び)で、配列を直接に扱うことはできません。後述の vprintf / vsprintf を用いるか for や forEach 内で記述することになります。
変数がスカラーか配列かを調べるには is_array($変数)を用います。配列(連想配列を含む)なら true, スカラーなら false になります。

文字列内の演算子

要素 . 要素 (二つの要素(文字列、変数値)の結合)

<?php
  $名前 = "田中";
  echo "こんにちは”. $名前 . "さん";    // こんにちは田中さん
?>

変数 .= 要素  (JvaScript の += と同じ)

<?php
  $名前 = "田中";
  $文字列  = "こんにちは";
  $文字列 .= $名前;
  $文字列 .= "さん";
  echo $文字列;
?>

" {$変数} "  (変数を展開。全体を " " で囲む(' ' は不可)

<?php
  $名前 = "田中";
  $敬称 = "さん";
  echo "こんにちは{$名前}{$敬称}";
?>

「要素 + 要素」 でのJavaScript との違い

print系関数

print

echoは文でprintは式ですが、echo と同じような出力命令で、通常は echo を用いればよいので、ここでは省略します。

printf フォーマットによる文字列の表示

printf は、指定したフォーマットで文字列を生成して表示する関数です。
まず、単純な例を示します。

<?php
  $変数1 = "ミカン";  // 文字列
  $変数2 = 50;        // 10進整数
  $フォーマット = "%sの値段は%d円です。"; 
  printf($フォーマット, $変数1, $変数2);
           // 「ミカンの値段は50円です。」と表示されます。
?>

sprintf フォーマットによる文字列生成

printf と同様ですが、printf が直接表示するのに対して、printf は文字列を生成します。それを表示するには、echo を用います。

●printf
 printf($フォーマット, $変数1, $変数2);
●sprintf
  $生成文字列 = sprintf($フォーマット, $変数1, $変数2);
  echo $生成文字列;

vprintf  配列変数  表示
vsprintf 配列変数  生成

それぞれ、printf, sprintf の変数を配列で与える機能です。

<?php
  $配列 = ["ミカン", 50];  // ミカンは%s、50は%d に対応
  $フォーマット = "%sの値段は%d円です。"; 
  vprintf($フォーマット, $配列);
?>

型演算子による桁合わせ

右寄せ0パティング %0nd (n は桁数)

<?php
  echo sprintf( '%06d',  1234).'<br>';    // 001234
  echo sprintf( '%05d',  1234).'<br>';    // 01234
  echo sprintf( '%04d',  1234).'<br>';    // 1234
  echo sprintf( '%03d',  1234).'<br>';    // 1234 実桁数が優先される
  echo sprintf( '%06d', -1234).'<br>';    // -01234
  echo sprintf( '%05d', -1234).'<br>';    // -1234
  echo sprintf( '%04d', -1234).'<br>';    // -1234
  echo sprintf( '%03d', -1234).'<br>';    // -1234
?>

echo sprintf( '%6s', "abcd").'<br>'; とすれば、右側に空白が入ります。

左寄せ空白パティング %-0nd (n は桁数) 下の * の直前に空白が入る

<?php
  echo sprintf( '%-07d',  1234).'*<br>';    // 1234   *
  echo sprintf( '%-06d',  1234).'*<br>';    // 1234  *
  echo sprintf( '%-05d',  1234).'*<br>';    // 1234 *
  echo sprintf( '%-04d',  1234).'*<br>';    // 1234*
  echo sprintf( '%-07d', -1234).'*<br>';    // -1234  *
  echo sprintf( '%-06d', -1234).'*<br>';    // -1234 * 
  echo sprintf( '%-05d', -1234).'*<br>';    // -1234*
?>

echo sprintf( '%-6s', "abcd").'<br>'; とすれば、左側に空白が入ります。

浮動小数点数の桁指定 %m.nf (mは全体。nは小数点以下桁数)

<?php
  echo sprintf( '%6.2f', 12.345).'<br>';  //   12.35
  echo sprintf( '%.2f', 12.345).'<br>';   //  12.35
  echo sprintf( '%.2f', 12.3).'<br>';     //  12.30
  echo sprintf( '%.2f', 0.123).'<br>';    //  0.12
  echo sprintf( '%.2f', 0.00123).'<br>';  //  0.00
  echo sprintf( '%.2f', 0).'<br>';        //  0.00
  echo sprintf( '%.2f', -0.123).'<br>';   //  -0.12
?>

HTMLタグとヒアドキュメント

ヒアドキュメントは、改行やスペースなどを含めた文字列をそのままの状態でソースコードの中に埋め込むために使われる手法です。
<<<範囲 ~ 範囲; とは、囲まれた内部をヒアドキュメントとするという意味です。(「範囲」ぬは EOF, EOM などを使うのが一般的です。

ヒアドキュメントをそのまま表示する例

<?php
  echo "PHPからの出力";
  echo <<<範囲
    <p>範囲からの出力</p>
  範囲;
?>

ヒアドキュメントを変数「$文字列」とする例

<?php
  echo "PHPからの出力";
  $文字列 = <<<範囲
    <p>範囲からの出力</p>
  範囲;
  echo $文字列
?>

組込関数

非常に多数の組込関数があります。
参照 php「関数リファレンス」https://www.php.net/manual/ja/funcref.php
  数学関数(Math 関数)https://www.php.net/manual/ja/ref.math.php
  文字列関数(String 関数)https://www.php.net/manual/ja/ref.strings.php
  画像関数(GD および Image 関数)https://www.php.net/manual/ja/ref.image.php

数値や文字列の加工分野では、JavaScript の関数機能をほぼカバーしていますが、関数名や機能などに違いがあり、個別に調べる必要があります。
いくつかの例を掲げます。