• 締切済み

PHPの言語仕様について

PHPのマニュアルを読んでいるのですが、以下の項目について説明が見つけられないでいます。 「()」や「{}」についての仕様が明記されていないようなのです。 他の言語では「()」は演算子の一つだったり、セパレーターの一つだったりしますが、PHPのマニュアルを私が読んだ限りではそのどちらとしても記述がありません。 また、「{}」については、rubyなどでいうブロックを形成するものではなく、if文やfor分で複文を実行するときにのみ使用される、ということのようですが、これ以上詳細な説明が見つけられませんでした。 PHPの言語仕様としては、マニュアルの他にドキュメントが有るのでしょうか? もしくはソースを読む必要があるのでしょうか? ※私が読んでいるのは日本語版のマニュアルです  http://www.php.net/manual/ja/index.php タイトル修正して質問しなおしました

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

みんなの回答

  • mizutaki
  • ベストアンサー率33% (111/333)
回答No.1

えーっと、私もそのあたり詳しくは知っているわけでは無いのですが、 少し前にそれに関係がありそうなソースの書き方を探したりしたのでその中で見つけた知識から。 {}はブロックを形成する為の要素になると思います。 if文でしたらブロックだと考えれば、ある程度説明が付くと思いますし、 ちょっと変わったコードになると、 $name = 'なまえ'; print $hoge = "今日から君は{$name}2号だ"; みたいな書き方が出来ます。 ({]を使わないと、変数の次にある2までが変数解釈される為の対策になる) また、 print $hoge = "今日から君は{md5($name.'2号')}だ"; みたいなソースでもちゃんと動きますし、関数展開だけじゃなく、ややこしい計算処理も一応可能です。 そして()は関数展開をする為の必須要素になると思いますよ。 ソースコードを書く時によくその場のノリで $atama = $mb_substr($name,0,1,'UTF-8'); と書いて「そんな関数無いよ」とエラーが帰ってきた経験があると思います。 つまり変数名の後に()が付くと「関数でしょ?でも、その名前存在しないからエラーね」 みたいに解釈しているのです。 そこで、さっきのエラー部分の前の行に $mb_substr = 'mb_substr'; と追加すると、 $mb_substr($name,0,1,'UTF-8'); の部分は、 mb_substr($name,0,1,'UTF-8'); と解釈されて、きちんと狙った通りに動いてくれるのです。 さらにとんでもないソースコードですが、 $name2 = 'name2'; $func = 'substr'; ${'head_'.$func($name2,0,1)}[] = $name2; var_dump($head_n); こんなソースを書くと、 'head_'.$func($name2,0,1) で解釈されて帰ってくる結果の文字列を変数として定義する事が出来ます。 具体的な答えではなく推測みたいな感じですが、 PHPではこういう類の仕様まで存在しています。

sonkm3
質問者

補足

ありがとうございます 「{」については制御構文でのブロック、のほかにも明示的にコードの切れ目を指定することができるのですね。たしかに、そうなのですが、どうも腑に落ちません。 「(」についてはそうですね。可変関数である、という目印に「(」を使っている、というか、変数の後ろに「(」がついていると関数として処理しようとしますね。 この「{」にしても「(」にしても、式の中で使う、文の中で使う、など条件によっていろいろ使われ方が変わってくるからマニュアルに統一的な説明が載っていない、ということなのでしょうか? ここ数年PHPを使って開発をしているのですが、この辺の曖昧な(わかりやすく明記されていない)仕様が怖くなってきているところです。 もし、この辺、統一的に解説した資料など(できれば公式の)をご存知でしたら教えてください。

関連するQ&A

  • スクリプト言語としてのPHPについて

    PHPについてほとんど知らない者です(他の言語もほとんど知りませんが・・・)。 Webで検索していると、Webアプリを開発するLL言語としてPHP, Ruby, Python, Perlを使っているというケースをよく目にします。一方、タスクを自動化するためのスクリプトを記述する言語としては、Ruby, Python, Perl, シェルスクリプトで記述しているケースをよく目にします(Linux/UNIX系)。 そして、PHPはWebアプリ開発言語としてかなりのシェアを占めていそうだが、スクリプト言語としてはそんなにシェアを占めていないのかな? という印象を持ちました。 そこでお聞きしたいのですが、スクリプト言語としてのPHPは他の言語と比較してどのような感じなのでしょうか? PHPはWebアプリ開発言語としてだけではなく、スクリプト言語しても開発現場でRuby, Perl同様に使われているといった感じなのでしょうか? あるいは、WebアプリはPHPで書いてるけど、スクリプトはPHP以外(Ruby, Pythonなど)で書いているという方は結構いるのでしょうか?その場合、何故PHPを使わずに別の言語を使っているのでしょうか? ご意見をお聞かせください。

    • ベストアンサー
    • PHP
  • why php?

    なぜ最近 php がこんなに人気が出てきたのでしょうか? perl, ruby に 比べて言語仕様的に魅力的な点があるのでしょうか? 開発スピードは 飛躍的に上がりますか?

    • 締切済み
    • PHP
  • 電子帳票システムが、JAVAでカスタマイズする仕様

    他の言語の例えば、Javascript、PHP、Ruby、Python、Go言語、Server Side Swiftなどでカスタマイズもしくは1から電子帳票パッケージキットを開発するのは無理だとするとGUIの機能や言語仕様など何か理由が御座いますでしょうか?

  • 初めてのプログラミング、rubyかphpか

    初めてプログラミングを学ぶのですが、rubyかphpかで迷っています。 現在のところの目的は、HP作成で、このokwaveのようなフォームを多用したサイトを作りたいと思っています。となると、PHPが向いているのでしょうが、「PHPはテンプレート言語だからプログラムの知識がつかない(他の言語に手を出すときにつまづく)」と聞きます。 そこで、RUBYも選択肢に入れています。 あと、WEBアプリ開発となると、PERLという言語もあるそうですが、PHPとどこが違うのですか? 回答お願いいたします。

  • 正規表現の仕様について

    "abcdefg"という文字列に対して、/a(bc|bcd)/ という正規表現で検索すると 秀丸エディタの正規表現検索では、"abcd"がマッチし、 スクリプト言語のrubyでは"abc"がマッチします。 これは使用している正規表現ライブラリで演算子'|'の評価の仕方が異なるのだと思うのですが、統一された仕様のようなものは存在しないのでしょうか? 他の正規表現ライブラリ間でもこのような細かな動作の違いというのは存在するのでしょうか?

  • ブラウザが解読できる言語を教えて下さい html,

    ブラウザが解読できる言語を教えて下さい html,css,javascript他にはどんな言語を読めるんですか? php,ruby,python,perl? C,java? swift,kotlin?

  • perl php ruby java(jsp?)等、webで使われる言語の特徴

    perl php ruby java(jsp?)等、動的なwebページを作成する時によく使われる言語の特徴を教えてください。何故それらの言語が使われるのか、他の言語で作る事はできないのか、が気になります。サーバサイドプログラミングには○○という特徴があるので、△△という特徴を持った言語が向いている。のような回答を期待したいです。(答えが解るなら、何でもいいですが!)

  • プログラム言語FortranとCの違いについて

    FortranとCの相違点ですが、言語仕様という意味ではなく、置き換えが効かない、すなわち片方にはあるが片方にはない、という違いについてお尋ねします。 それはビット演算ということです。私はあるプログラム集の説明を見ていて、”この仕事はビット演算なのでC言語です。それ以外はFotranです”とありました。Fotranではビット演算ができない、ということを言っているように感じました。実際、Fortranでは無理なのでしょうか。できるけど面倒な処理になるという意味ではなく、できない、ということでしょうか。C言語のようなビット処理は。 よろしくおねがいします。

  • Rubyにインクリメンタル演算子がない理由は?

    Rubyには他の言語でよくある++演算子がないようなのですが、 なぜないのでしょうか? 盛り込むのはそう難しくないと思うので、ないのはそれなりの思想があると思うのですが、どういう意図なのでしょうか?

    • ベストアンサー
    • Ruby
  • 三項演算子(PHP)について

    次の判定をしたいのですが、正しい値が返ってきません。 PHPマニュアルには「三項演算子を"積み重ねて"使用することは避けましょう。ひとつの文の中で複数の三項演算子を使用した際のPHPの振る舞いは、少々わかりにくいものです。」という記述がありますが、PHPで正しく判定する方法はありますか。 (1) 総所得金額($income)が、33万円($deduction)を超えない世帯は、7割軽減されます。 (2) 総所得金額が、33万円に被保険者($people)(当該納税義務者を除く。)1人につき245,000円を加算した金額を超えない世帯は、5割軽減されます。 (3) 総所得金額が、33万円に被保険者1人につき35万円を加算した金額を超えない世帯は、2割軽減されます。 $income = $income <= $deduction ? '0' : $income - $deduction; $judge = ($income = '0') ? '7割軽減' : ($income < ($people - 1) * '245000') ? '5割軽減' : ($income < $people * '350000') ? '2割軽減' : ''; PHP マニュアル http://www.php.net/manual/ja/index.php

    • 締切済み
    • PHP

専門家に質問してみよう