ブログBlog
PHPとPerlの変数とスコープ
投稿日:2021年08月06日 トピックス
こんにちは、江宮です。 この前業務でPHPとPerlを扱う機会がありました。 そこで変数のスコープをしっかり意識しておかなければ、システムにバグが発生することを知ったので、今日は備忘録的に書き留めたいと思います。Perlで変数宣言するとき
基本的には以下の3通りになります。 my $変数名 = “hello”;(ローカル:宣言した関数内から参照可) local $変数名 = “hello”; (サブローカル:宣言した関数内と実行関数内から参照可) our $変数名 = “hello; (グローバル:パッケージ外からは完全修飾名で参照可)といったように、スコープによって書き方がちがってきます。また、use strict宣言なしでは修飾子なしで
$変数名 = “hello”; (グローバル)
と記述することも可能です。
PHPで変数宣言するとき
$変数名 = “hello”; (ローカル:宣言した関数内から参照可)が基本です。 しかしスコープが一つの関数内だけでは複雑な処理には対応できません。 ここで、変数のスコープをグローバル化するには、グローバル修飾子というものを使用します。 関数外で初期化しておき、関数内でglobal宣言しておきます。
$変数名 = “hello”; function 関数名(){ global $変数名; …. }
といった構造です。 また関数内でstatic修飾子を使用して変数宣言することによって、関数外でもその変数の値を保持することもできます。
static $変数名 = “hello”;
他には各言語共通で基本的な方法ですが、関数の引数で変数値を受け取って加工し、戻り値で返すといった方法もありますね。