• 締切済み

strictなPHP

PHPではPerlで言うところの use strict に相当するものはあるのでしょうか? (変数宣言しないでコーディングできちゃうのが何か気持ち悪くて…)

  • PHP
  • 回答数1
  • ありがとう数4

みんなの回答

回答No.1

こんにちは。 Perlはもうだいぶ昔にやっていた程度と、 use strict の詳しい機能がわからないので、正確な答えはお答えすることは出来ませんが、PHPでは・・・・私が知る限りでは聞いたことはないですね。 今簡単に調べたら、use strict は、「変数がmy で宣言したローカル変数か、パッケージ名を含めて完全に記述された変数しか使えなくなる」 ようですね。あとは、初期化されてない変数を使おうとするとエラーが出るんでしょうかね。 PHPは標準で my を付けなくともローカル変数になりますから、これに関しては気にしなくていいですよね。 宣言や初期化していないと注意されることに関しては、Cでイヤと言うほどコンパイラに怒られてるので・・。 どうやって開発するか。にもよるのでしょうが、 たとえば、私の場合はデフォルトでグローバルな変数になるPerlはやはり気持ち悪い(?)です。 あとは、厳密な意味での宣言、つまり変数の型宣言がないと気持ち悪い。と、言う人もいるでしょうし。 個人的には、Perlだけじゃありませんが、PHPもJAVAのように例外処理をしていないと気持ち悪い気もします。(ただ楽をしたいだけ、っていうのもありますが・・・)(;-_-) 私の場合は、CやJAVAやC#に触れる機会が多いので自ずから注意するくせが染みこんでいますので・・・。 逆にPHPでやるときぐらいは好き勝手にやらせてくれ。 みたいな。(^ ^ ;ゞ 感じですかね。。。 答えにならなくてすみません。

関連するQ&A

  • use strictが効かない (PERL)

    たびたびお世話になっております。 PERL version 5.14.2 をWindows 7 のコマンドプロンプトから起動して使っています。 use strict; と一行目に書くと 宣言されていない変数があれば拒絶されるとのことで #!/usr/bin/perl use strict; use warnings; $a = 10; print "$a\n"; というスクリプトを書きました。が、すんなり動いてしまいます。 use strict; は どうすればうまく効くのでしょうか。 ご指導お願いします。

    • ベストアンサー
    • Perl
  • PerlからPHPへ移行したときの注意事項は

    PerlからPHPに移りまして、戸惑うことがあります。 Perlでは、 use strict; my $hensuu = 1; とレキシカル変数としなければ、変数未宣言となり スペル間違いの変数の使用が避けられるのですが、 PHPでは、 $hensuu = 1; と、何の設定もなく、利用時に $hensu += 0; としても問題なく動作します。 これって危険なのですが、みなさんはどう対処していますか? あと、PerlからPHPにソース移行する場合に 気をつけないことがありましたら、教えてください。

    • ベストアンサー
    • PHP
  • perl use strict エラーにならない?

    perlの使い方を勉強しているのですが use strict;を記述すると 変数宣言が必要になるということですが 以下のように記述してもエラーになりません。 use strict;を記述すると my $a;がないと$a="Hello";で エラーになるのではないのでしょうか。 ---test.pl---- use strict; $a="Hello"; print $a; -------------- >test.pl Hello > (Windows7, ActivePerl)

    • ベストアンサー
    • Perl
  • use strictを宣言してlocal変数を使うには?

    Perl初心者です。初歩的な質問ですが、 サブルーチンの中で my だと、その下の{ } ブロックではmyで宣言したローカル変数がスコープされないので  localを使うのではないかと思いますが、 それだと、use strictではエラーになります。 こんなときどう処理したらよいのでしょうか。

    • ベストアンサー
    • Perl
  • "use strict" を使っての定数宣言

    "use strict" プラグマを使ったスクリプト内で、 ・定数(グローバルかつ不変) ・グローバル変数 を宣言するには、どのようにすればいいのでしょうか。 windows 2000, ActivePerl 5.6.1

    • ベストアンサー
    • Perl
  • Perlで use strict して our変数

    Perl 初心者です。初めて質問します。 test_sub.pl で宣言した変数を test_main.pl から参照したくて悩んでいます。 環境 : WindowsXP / ActivePerl 5.14.2 -------------------- * test_sub.pl -------------------- #!/usr/bin/perl use strict; our $hoge = 'HOGE'; 1; -------------------- * test_main.pl -------------------- #!/usr/bin/perl use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; -------------------- これを実行すると、 Global symbol "$hoge" requires explicit package name at C:/public_html/cgi-bin/test_main.pl line 7.\r というエラーが出ます。 require する前に、test_main.pl のほうで our($hoge); と宣言したり 参照する際に print $main::hoge; とパッケージを指定したりすればいけるのですが、 これらをしないとできないものなのでしょうか。 use strict; を書かなければ最初のソースでも動くのですが use strict は書きたい… 継承のようなことをしたいのです。 ちなみに以下試してみたソースです。 -------------------- * test_main.pl -------------------- #!/usr/bin/perl ######################################## # NG use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; ######################################## # OK our変数を宣言しておくといける =pod use strict; our ($hoge); require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## # OK 参照する際にパッケージ名を指定すればいける =pod use strict; require 'test_sub.pl'; print "Content-type: text/html\n\n"; print $main::hoge; =cut ######################################## ######################################## # NG =pod use strict; use base qw(test_sub); print "Content-type: text/html\n\n"; print $hoge; =cut ######################################## -------------------- * test_sub.pm -------------------- #!/usr/bin/perl package test_sub; use strict; our $hoge = 'HOGE'; 1; -------------------- NG パタンはどちらも Global symbol "$hoge" requires explicit package name のエラーとなります。 もしご存じの方がいらっしゃいましたら教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • strict と require と グローバル変数

    また基本的なことをお伺いします。 ↓メインスクリプト(main.pl) ------------------------------ #!perl use strict; require("x.pl"); print "X = $x\n"; ------------------------------ ↓サブスクリプト(x.pl) ---------------------- our $x = "XXX"; ---------------------- これをそのまま、main.plを実行すると、 Global symbol "$x" requires explicit package name at main.pl line 4. のようにエラーが出ます。 この対処として、色々試したのですが、 例えば、次のようにすれば、とりあえず回避はできました。 ↓メインスクリプトにて、 ------------------------------ #!perl use strict; our $x; ←★ここで宣言を入れておく。 require("x.pl"); print "X = $x\n"; ------------------------------ <質問です> 1)この回避策は妥当でしょうか。他に正しい方法がありましたら、教えてください。 2)そもそも、use strictは、requireの展開よりも先に実行されてしまうものでしょうか。 以上、よろしくお願いします。 Win-2000sp4+ActivePerlのV5.8.7で使っています。

    • ベストアンサー
    • Perl
  • Perlでuse strictと %inの共存

    use strictを使うと、変数の使用に厳密にチェックしてくれるので、便利だと思い使いましたが、ReadParse後の%inを利用する場合に宣言されていないエラーが表示されます。意味的には正しいですが、$in{'test'}など CGIで受け取った内容が扱えなくなるので、困っております。何か解決方法は有るのでしょうか? use strict; require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse; my $x = $in{'md'};

    • ベストアンサー
    • Perl
  • xhtmlのstrictモードについて

    CSSを使用しています。 今まではhtmlでコーディングしていましたが、使わない方がよいとされる要素や属性を一切しようしていないため、xhtmlのstrictモードの宣言もできると思うんですが、それには何か欠点があるのでしょうか? Transitionalモードのソースはよく見かけますが、strictはなかなか見かけないのでまだ不具合があったりするのかと疑問です。 今xhtmlのweb制作切り替えるのはどんなリスクがあるのか教えてください。お願いします。

    • ベストアンサー
    • HTML
  • PHP Strict Standards

    本に載っている、PEARのCalendar.phpを使用したプログラムを実行すると Strict Standards: Non-static method Calendar_Engine_Factory::getEngine() should not be called statically, assuming $this from incompatible context in /usr/share/php/Calendar/Calendar.php on line 210 というエラーが出ます。 ネットで検索すると、php.iniの中の error_reporting = E_ALL | E_STRICT を error_reporting = E_ALL | ~E_STRICT に変えるだけでエラーが出なくなるみたいでした。 http://www.xoops.org/modules/newbb/viewtopic.php?post_id=330699 私のは error_reporting = E_ALL & ~E_DEPRECATED となっていたので、 error_reporting = E_ALL | ~E_STRICT に変えてlamppを再起動しましたが、まったく同じエラーが出ます。 error_reporting = E_ALL & ~E_STRICT にしても同じです。 解決方法を教えてください、 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう