PHP単語

ピーエイチピー
  • 9
  • 0pt
掲示板へ

PHP(PHP:Hypertext Preprocessor)とは、動的なウェブページを表現するために動的なHTMLを出することに特化したプログラミング言語、またはその処理系である。非常に高速に動作するCGI仲間である。

なお、PHPとはpersonal homepageから来ているらしい。

曖昧さ回避
  1. PHP研究所 - 京都に本社をおく出版社。

概要

PHPは、Webサーバー上で実行するサーバーサイドスクリプティングである。動的なページを実現するためにPHPグループオープンソースシステムとして開発をしていて、でも自由に利用することができる。Webアプリケーション開発によく利用され、世界中の約2000ドメイン以上で使用されているとして知られている。

また、PHPはインタープリタプログラミング言語Perlと同じようにソースファイルコンパイルせずに実行することができる。ただし、コンパイルしないので当然ネイティブコード機械語)をはき出さない。
書き方も特徴的で、プログラムソースコードHTML内に埋め込む事ができ、動的でないHTML部分を出する場合において非常に単純な出方法となる。

PHPの魅は、PostgreSQL、MySQLSQLiteOracleMSSQLなどの数十のデータベースに対応しており、幅広く活用できる点であり、高度なWebアプリケーションが作成できることである。
文法についてはC言語およびC言語から生した言の文法によく似ていて、C、C++Javaなどのメジャープログラミング言語を習得したプログラマー違和感なく利用できるような文法を採用している。加えて、ある程度直感的に扱える言設計になっているので、初心者でも取っ付きやすいと言われている。

だが、簡単で動きやすい反面、冗長なスパゲッティコードにもなりやすく、一定の品質を構築するにはそれなりに高いスキルめられる、の深い言にもなっている。

特に今日ではhtmlに特化した言となってきており、色々な機が盛り込まれてきている。

PHPフレームワークも種類が非常に多く、今日日本を含め、世界で一番人気があるのはLaravelであるが、世界では他にアメリカ東南アジアで根強い人気を誇るCodeIgniter、フランスで生まれ、ヨーロッパ流のSymfonyなどのシェアが高い。ほかに、日本などで根強い人気を誇るCakePHPオランダで生まれ、ベネルクスドイツなどで根強い人気を誇るZendframework、中国で生まれロシア人気が高いYiiシェアが高く、ほかにPhalconfuelPHPなどがある。

また、世界で最も用されているCMSの一つ、WordPressはPHPをとしている。

サーバーサイドスクリプティング

ブラウザURLからPHPファイルを要されると、Webサーバー上で要されたスクリプトを実行し、その結果をHTMLの内容などでブラウザに出する。この仕組みのことをサーバーサイドスクリプティングと呼び、それらに属するプログラミング言語サーバーサイドスクリプティングと呼ぶ。

あくまでもスクリプトの実行はサーバーで行うため、利用するブラウザを選ばないという特徴がある。

これに対し、JavaScriptVBscriptなどは、ブラウザプログラムが実行されるため、サーバーサイドスクリプティングに対してクライアントサイドクリティングと呼ぶ。

PHPはHTMLドキュメント内にスクリプトを書く書式が一般的だが、中にはCakePHPやZend Frameworkのそれのように、PHPスクリプトHTMLドキュメントを書き出す書式もある。

プログラム例

まずは、Hello Worldを出してみる。PHPスクリプトは<?php ~ ?> の~の部分に記述する。

<html>
<head>
<title>Hello World!</title>
</head>
<body>
<?php
echo "Hello World!";
?>
</body>
</html>

PHPは変数の宣言およびの宣言が不要である。したがって数値をそのまま文字として出することもできる。
以下は、変数$add1変数$add2を加算して画面に出するプログラムである。
この場合、画面には「2564」と表示される。

<html>
<head>
<title>変数の扱い</title>
</head>
<body>
<?php
$add1 = 2525;
$add2 = 39;

$add1 = $add1 + $add2;
echo "結果は".$add1."です";
?>
</body>
</html>

if,for,while,do while,switch,foreach

//1から100まで任意の値をランダムに取得し、奇数偶数かを表示
$num = rand(1,100); 
if($num % 2 == 0 ){
    echo "{$num}は偶数です";
}elseif( $num % 2 == 1 ){
    echo "{$num}"は奇数です。
}
//また、一行だけならこういう括弧省略した記述もできる
if($num == 0 ) echo "0はどちらでもありません";

  • for  …順々に処理していく。一部の他言のように一定間隔でループはできない。

//変数$xに対し、順々に累乗を出していく
for($x = 0 ;$x < 10; $x++ ){
    $square = pow($x); //pow()は冪乗を取得する関数
    echo "{$x}の累乗は{$square}です";
}

  • while …一定条件を満たすまで処理を繰り返す。

//一定の条件を満たすまで処理を繰り返す
$hp = 1000;
$hit = 0;
while($hp > 0){
    $hp += rand(1,1000); //乱数で出た値だけ回復する
    $hp -= rand(100,1000); //乱数で出た値だけ$hpが減る
    $hit++;
}
echo "あなたは{$hit}回攻撃に耐えました";

  • do while …while文と違い、最低1回の処理を行ってから処理を繰り返す。

//簡単なじゃんけんゲームプログラム化したもの
$items = ["g" =>"グー","c" => "チョキ","p" => "パー"];
$p1 = ""; $p2 = "";
do{
    $p1 = array_rand($items);
    $p2 = array_rand($items);
}while( $p1 == $p2); //引き分けならもう一度繰り返す
$judge = $p1.$p2; //キー連結し、判定用のフラグを作る
if($judge == "gc" || $judge == "cp" || $judge == "pg"){
    echo "{$items[$p1]}でプレイヤー1の勝ちです";
}else{
    echo "{$items[$p2]}でプレイヤー2の勝ちです";
}

  • switch …与えられた値に対し、処理を分岐する。ifより処理が速い。

switch( $area ){
    case "Tokyo" : $phone = "03";
    break;
    case "Osaka": $phone = "06";
    break;
    default:   $phone = "その他の番号";
}
echo ”あなたのお住まいの外局番は{$phone}です”;

  • foreach …与えられた配列に対し、反復処理を行っていく。

$central = [
                   ["Giants","Tigers","Dragons"],
                   ["Jabbit","Tolucky","Doara"],
               ];
foreach ($central as list( $team,$mascot) ){
    echo "{$team}のマスコットは{$mascot}です\r\n";

データベースとの連携

PHP5.5以降はMySQLに接続するには従来のMySQLライブラリが非推奨(Ver5.5以降、Ver7では削除済)となっているため、mysqli クラスexitを使うか、PDO(PHP Data Objects)クラスexitを使うことが推奨されている。

<?php
try
{
     //MySQLに接続
   $dbh = new PDO("mysql:host=localhost","root","",array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,    PDO::ATTR_EMULATE_PREPARES => false,    PDO::ATTR_DEFAULT_FETCH_MODE => false   ));

} catch (PDOException $e) {
  echo $e->getMessage() or die();
} 
?>

PHPは初心者向け…だよね?

そう思うなら、以下の問題を解いてみて、そして絶望してみてください。PHPはけっこういろんなことができます。

初級編

  • 問1:2つの変数、$val1と$val2を、if式を使わずに較して、大きい値を$largerを格納する式を一行で書いてみてね。
  • 問2:改行コードを含む文字列に対し、改行コードに何が含まれているか調べるにはどうしたらよいか答えてね。
  • 問3:変数$objに、配列を使わずに$name,$age,$addressの三種類の値を入れて取り出せるようにしてね。

中級編

  • 問4:小数点2の桁を丸める定義関数、roundmath()を作ってね。ただし、正数、負数どちらにも対応できるようにね。
  • 問5:任意の行数$columnだけあるテーブル"HOGE"に対するSQLのInsert文で、一行でプレースホルダを埋め込んだ式を作成してみてね。なお、プレースホルダの記号は何を使ってもOKです。
  • 問6:$desc_number = function(){ echo $number--;}; この関数に少しだけ手を加えて、関数desc_number()を実行するたびに、数を減らしていくようにしてね。なお、$numberには最初に100だけ代入されています。

上級編

各問題のヒント

  • 問1:三項演算子を使えば簡単です。毛嫌いする人もいますが、ちょっとしたフラグ分岐などでけっこう使います。
  • 問2:改行コードはとあるエンコードにすると見ることが出来ます。あとは、適当に吐き出してみてください。なお、エンコード制御とPHPは切っても切り離せない腐れ縁です。
  • 問3:つまりはオブジェクトを使えってことです。スカラ値みたいなことがPHPにもできます。
  • 問4:round()関数を使います。でも、これだけだと整数しか対応していないので、あとは考えてください。けっこうPHP学習でも頻出の問題です。
  • 問5:PHPとデータベースは持ちつ持たれつの関係ですが、セキュリティ対策は欠かせません。プレースホルダって何?とか言ってるようでは本当に落になりませんので、プロなら即刻PHPから手を引いた方が難です(マジで)。
  • 問6:JavaScript学習で混乱しそうになった苦労じゃ…クロージャを使います。実はPHPでもできて、しかもJavaScriptより理解しやすい…気がする。
  • 問7:定数関数は$がつかないので、普通はそれと認識してくれませんが、変数は$が付き、範囲を括弧でくくれば変数と認識してくれます。これを応用したテクニックで、知っておくと得します。
  • 問8:普通だとcannot redeclare(定義済みじゃヴォケ!)って怒られますが、事前のもの」と宣言しておけば怒られません。
  • 問9:each()が非推奨となり、foreachの中にarray_map()を使うのは、PHP7以降欠かせない手法となりました。もっとも、同じ要素数なら初級~中級レベルですが…。
  • 問10:クラスの中で関数を使い回せるように、つまりレイトを使います。PHPは普通だと並列処理できないですが、要は最終結果さえ合えばいいんです。

その他

ニコニコ動画はPHPで作られているので、PHPが嫌いとかいうやつはニコニコ動画に来な(ry

あと、文法がPerlと似ている部分もあるが、根本的に違う点はPerlが後方互換性に優れているのに対し、PHPは常に流行をパクる採り入れる傾向にあり、古い記述をどんどん切り捨てている傾向がある。これは利用者が多い反面、セキュリティ的なリスクも多く背負っている言なのも一因である。

近年はRubyRails)、Pythonプログラム入門に選ぶ人も増えてきており、2018年における人気では4~7位と、いっときより幾分勢いは弱くなっている。しかし、初心者向けウェブページ制作人気の高いCMSであるWordPressハイブリッドアプリ制作にも用いられるLaravel、cakePHPなどのフレームワークなど、まだまだPHPはWeb上で一定の地位を保っている。

PHPの予約関数1000以上はある。しかし、普段からよく使うのは200ほどであり、ある程度覚えておくだけで問題ないだろう。

よく使う予約関数

関連動画

関連コミュニティ

関連項目

【スポンサーリンク】

  • 9
  • 0pt
スマホ版URL:
https://dic.nicovideo.jp/t/a/php

この記事の掲示板に最近描かれたお絵カキコ

お絵カキコがありません

この記事の掲示板に最近投稿されたピコカキコ

ピコカキコがありません

PHP

22 ななしのよっしん
2014/05/17(土) 20:03:41 ID: 3UMQj5e6i6
PHPに限らないけど、コードを書くだけならメモ帳でできるよ
23 ななしのよっしん
2014/05/27(火) 06:07:35 ID: pO4qDm5yOr
1の1からムズすぎ
24 ななしのよっしん
2014/07/18(金) 22:48:48 ID: 39s+vnLyO7
PHPWebページ開発の現場で再評価されてるのは、DBとの相性の良さ、これに尽きるjsライブラリのお陰で、Ajax使って簡単に非同期通信できるようになったし。
25 ななしのよっしん
2016/05/14(土) 00:01:04 ID: ILkGljaV/+
Win32APIハロワがわざわざやたら長いコードでウインドウ描画して「Win32ハロワはこんなに長いんです」と説明してたの思い出した
MessageBoxでいいのに

php -r "echo 'Hello World!';"
で構わんだろWebじゃなくても
ハロワってそういうもんだろ
26 ななしのよっしん
2016/08/09(火) 10:53:31 ID: F7enEJR+Qh
$_POST/$_GET/$_COOKIE/$_SERVER/$_ENVといったスーパーグロバル変数へ直接アクセスするのは危険なので以下のような関数をつくっておきます。

<?php
function ValidateInputData($type = null, $name = null)
{
$filterTypeArray = array(
"Post" => INPUT_POST,
"Get" => INPUT_GET,
"Cookie" => INPUT_COOKIE,
"Env" => INPUT_ENV,
"Server" => INPUT_SERVER,
);
(省略しています。全て読むにはこのリンクをクリック!)
27 ななしのよっしん
2016/08/21(日) 01:51:41 ID: YPjlwW4xG3
http://ritsuan.com/job/1597/exit
仕事概略 【東京都 23西部IT分野/クラウドサービス開発
PHP
雇用形態 正社員
1つの安といたしまして、今案件は350,000円~800,000円程の収を予想しております。
28 ななしのよっしん
2018/06/29(金) 21:37:30 ID: V2iAz+7BzA
PHPの長所:開発速度い 保守が簡単 初心者でも扱える
PHPの短所:サービス重たくなる 大規模システムには向かない

ニコニコ重い戦犯はこの言
29 ななしのよっしん
2018/07/16(月) 11:23:30 ID: Bs8+hpQyL/
ニコニコって今そんな重いっけ?
動画は処理が重いというよりトラフィック絞ってるから読み込みに時間食ってるだけなのでは
大百科の方は前よりは軽くなったような
30 ななしのよっしん
2019/02/01(金) 22:31:00 ID: 39s+vnLyO7
重くなるのは書き方が甘いだけだと思う。駄な変数とか冗長なループとかな。上級者ほどメモリ使用量を考えたり、データベースチューニングをしっかりしたりしてる。

あとPHPは7.xになってから動作がかなり軽くなったね

31 ななしのよっしん
2019/05/01(水) 17:25:22 ID: ILkGljaV/+
の低いプログラマはそもそも何をやっていいか分からない」という昔の通例を破棄して「の低いプログラマでも数集めりゃ作れるけど死ぬほど遅い」という新常識を作り上げたのがほぼPHPと言っていい

急上昇ワード