🌟

【jsとphp】変数のスコープの違い

2024/04/24に公開

留意事項

この記事はAIで生成されたもの加筆・修正したものです

jsとphpでは変数のスコープの範囲が異なる

PHPではスコープが厳格に管理されているのに対し、JavaScriptではよりゆるやかに扱われています。

1. ブロックスコープ

JavaScriptではletconstを使って宣言された変数はブロックスコープを持ちますが、PHPにはブロックスコープの概念がありません。

// JavaScript
if (true) {
  let x = 5;
  const y = 10;
}
console.log(x); // エラー: x is not defined
console.log(y); // エラー: y is not defined
<?php
// PHP
if (true) {
  $x = 5;
  $y = 10;
}
echo $x; // 出力: 5
echo $y; // 出力: 10

2. 関数スコープとグローバルスコープ

PHPでは、関数外で宣言された変数はグローバルスコープとなり、関数内ではglobalキーワードを使わない限りアクセスできません。一方、JavaScriptにはこのような制限はなく、関数内からグローバル変数にアクセスできます。

// JavaScript
let x = 5;
function test() {
  console.log(x); // 出力: 5
}
test();
<?php
$x = 5;
function test() {
    echo $x; // エラー: Undefined variable
    global $x;
    echo $x; // 出力: 5
}
test();

3. 変数の巻き上げ(Hoisting)

JavaScriptでは、変数宣言が暗黙的に巻き上げられますが、PHPにはこの概念がありません。

// JavaScript
console.log(x); // 出力: undefined
var x = 5;
<?php
echo $x; // エラー: Undefined variable
$x = 5;

このように、変数のスコープの扱いには言語によって大きな違いがあるため、注意が必要です。

phpでグローバル変数を関数内で処理したあとにグローバル変数に返したい場合

上記見出しのニュアンスがおかしいかもしれませんがご容赦ください

以下のように明示的に返す必要があります。

<?php
$x = 5;
$x = func($x); // 関数の戻り値を$xに代入
echo $x; // 出力: 6

function func($num){
  $result = $num + 1;
  return $result;
}

Discussion