情報学部 | 菅沼ホーム | 目次 | 索引 |
<?php // <? でも良い場合がある ここに,PHP のプログラム ?>
01 <!DOCTYPE HTML> 02 <HTML> 03 <HEAD> 04 <TITLE>PHPの例</TITLE> 05 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> 06 <LINK REL="stylesheet" TYPE="text/css" HREF="../../master.css"> 07 </HEAD> 08 <BODY CLASS="white"> 09 <H1>PHPの例</H1> 10 <DL> 11 <DT>嗜好品 12 <?php 13 $fr = array ('リンゴ', 'ミカン', 'イチゴ'); 14 for ($i = 0; $i < 3; $i++) { 15 ?> 16 <DD>果物: <?php echo $fr[$i]."\n" ?> 17 <?php 18 } 19 ?> 20 </DL> 21 </BODY> 22 </HTML>
<DD>果物: リンゴ <DD>果物: ミカン <DD>果物: イチゴ
<!DOCTYPE HTML> <HTML> <HEAD> <TITLE>PHPの例</TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8"> <LINK REL="stylesheet" TYPE="text/css" HREF="../../master.css"> </HEAD> <BODY CLASS="white"> <H1>PHPの例</H1> <DL> <DT>嗜好品 <DD>果物: リンゴ <DD>果物: ミカン <DD>果物: イチゴ </DL> </BODY> </HTML>
<?php echo "test\n"; ?>
php echo.php
php -r "echo 'test\n';"
01 <?php 02 $x = 123; 03 echo '変数$xの値は '; // そのまま出力 04 echo $x."\n"; 05 // echo "変数$xの値は ".$x."\n"; // 「$xの値は」を変数名とみなしている(エラー) 06 echo "変数 $x の値は ".$x."\n"; // スペースで区切って変数を明確にする 07 echo "変数 ${x} の値は ".$x."\n"; // 「{」と「}」で区切って変数を明確にする 08 echo "変数 {$x} の値は ".$x."\n"; // 「{」と「}」で区切って変数を明確にする 09 echo "変数 \$x の値は ".$x."\n"; // 「\」で「$」の機能を無効にする 10 ?>
変数$xの値は 123 変数 123 変数 123 の値は 123 変数 123 の値は 123 変数 123 の値は 123 変数 $x の値は 123
. : 文字列の結合 + : 加算(配列の場合は要素の和集合,後述) - : 減算 * : 乗算 / : 除算 小数点以下が常に計算される(以下に示すいずれかの方法で小数点以下切り捨て) ( floor($x / $y),intval($x / $y),(int)($x / $y),(integer)($x / $y) ) % : 余り 被除数,除数を共に整数型に変換(小数点以下を切り捨て)してから計算 ( 7.3 % 2.3 は,1 ) = : 代入 ++ : インクリメント演算子( 1 だけ増加) -- : デクリメント演算子( 1 だけ減少)
01 <?php 02 /****************************/ 03 /* 2つのデータの乗算と除算 */ 04 /* coded by Y.Suganuma */ 05 /****************************/ 06 // データの入力 07 printf("2つのデータを入力して下さい "); 08 // echo "2つのデータを入力して下さい "; // echo ("2つの...") でも可,以下同様 09 // print "2つのデータを入力して下さい "; 10 $str = trim(fgets(STDIN)); 11 $x = intval(strtok($str, " ")); // 小数点以下切り捨て 12 $y = intval(strtok(" ")); // 小数点以下切り捨て 13 // 乗算と除算 14 $mul = $x * $y; 15 $div = $x / $y; 16 // 結果の出力 17 printf("乗算=%d 除算=%d %.3f\n", $mul, $div, $div); 18 echo "乗算=".$mul." 除算=".$div."\n"; 19 print "乗算=".$mul." 除算=".$div."\n"; 20 ?>
fscanf(STDIN, "%d %d", $x, $y);
2.3 4.5 3.4 .....
for ($i1 = 0; $i1 < $n; $i1++) fscanf(STDIN, "%lf", $x[$i1]);
2つのデータを入力して下さい 8 3
乗算=24 除算=2 2.667 乗算=24 除算=2.6666666666667 乗算=24 除算=2.6666666666667
> より大きい a > b 式 a の値が式 b の値より大きいとき真 < より小さい a < b 式 a の値が式 b の値より小さいとき真 >= 以上 a >= b 式 a の値が式 b の値以上のとき真 <= 以下 a <= b 式 a の値が式 b の値以下のとき真 == 等しい a == b 式 a の値と式 b の値が等しいとき真(配列にも使用可) === 等しい a === b 式 a と式 b の型と値が等しいとき真(配列にも使用可) !=, <> 等しくない a != b, a <> b 式 a の値と式 b の値が等しくないとき真(配列にも使用可) !== 等しくない a !== b 式 a と式 b の型か値が等しくないとき真(配列にも使用可) ||, or 論理和 x || y, x or y 式 x が真か,または,式 y が真のとき真 &&, and 論理積 x && y, x and y 式 x が真で,かつ,式 y が真のとき真 xor 排他的論理和 x xor y 式 x,または,式 y のいずれか一方だけが真のとき真 ! 否定 ! x 式 x が偽のとき真
| 論理和 x | y 対応するビットのいずれかが 1 のとき真. & 論理積 x & y 対応するビットの双方が 1 のとき真 ^ 排他的論理和 x ^ y 対応するビットが異なるのとき真 ~ 1の補数 ~ x ビット毎に 1 と 0 を反転する << 左にシフト x << 3 3 ビット左にシフト.x を 23 倍することに相当. >> 右にシフト x >> 3 3 ビット右にシフト.x を 23 で割ることに相当.
new: クラスのインスタンス(オブジェクト)を生成するために使用します(例: $obj = new Example() ) + : 配列要素の追加 & : リファレンス ` (実行演算子):コマンドの実行
if (論理式) { 文1(複数の文も可) } else { 文2(複数の文も可) }
if (論理式) { 文1(複数の文も可) } else if (論理式) { 文2(複数の文も可) } ・・・ else { 文n(複数の文も可) }
switch (式) { [case 定数式1 :] [文1] [case 定数式2 :] [文2] ・・・・・ [default :] [文n] }
for (初期設定; 繰り返し条件; 後処理) {
文(複数の文も可)
}
・・・
while (繰り返し条件) {
文(複数の文も可)
}
do { 文(複数の文も可) } while (繰り返し条件) ;
foreach (配列変数名 as 値を入れる変数名) { 文 } foreach (配列変数名 as キーを入れる変数名 => 値を入れる変数名) { 文 }
01 // 宣言だけ(要素数は 0 ) 02 $x = array(); // array(3) のように要素数を指定することも可 03 $x[0] = 1; 04 $x[1] = 2; 05 $x[] = 3; 06 print_r($x); 07 echo "\n"; 08 // 宣言と初期設定 09 $y = array(1, 2.3, "abc"); 10 $y[3] = 40; 11 print_r($y); 12 echo "\n";
Array ( [0] => 1 [1] => 2 [2] => 3 ) Array ( [0] => 1 [1] => 2.3 [2] => abc [3] => 40 )
$u1 = array(1, "abc", 2); $u2 = $u1;
$v1 = array(2); $v1[0] = array(10, 20, 30); $v1[1] = array(40, 50, 60);
$v2 = $v1; $v3 = $v1[0];
$z = array(600, 'first'=>100, 'second'=>200, 400); $z[] = 500; $z['last'] = 300; print_r($z); $z[1] = 4000; $z['first'] = 1000; print_r($z);
Array ( [0] => 600 [first] => 100 [second] => 200 [1] => 400 [2] => 500 [last] => 300 ) Array ( [0] => 600 [first] => 1000 [second] => 200 [1] => 4000 [2] => 500 [last] => 300 )
function 関数名 (引数, ・・・) { 処理 }
01 /****************************/ 02 /* 関数(様々な引数) */ 03 /* coded by Y.Suganuma */ 04 /****************************/ 05 // クラス Complex 06 class Complex 07 { 08 public $x; 09 public $y; 10 function __construct($x1, $y1) { // コンストラクタ 11 $this->x = $x1; 12 $this->y = $y1; 13 } 14 } 15 // 関数 func 16 function func($x1, &$x2, $y1, &$y2, $z1, $x3 = 10) 17 { 18 $x1 += 10; 19 $x2 += 10; 20 $y1[0] = 100; 21 $y2[0] = 100; 22 $z1->x = 1000; 23 return ($x1 + $x2 + $x3); 24 } 25 26 $a1 = 1; 27 $a2 = 2; 28 $b1 = array(10, 20); 29 $b2 = array(10, 20); 30 $c1 = new Complex(1, 2); 31 32 print "関数を呼ぶ前\n"; 33 printf("\$a1 %d \$a2 %d \$c1 %d\n", $a1, $a2, $c1->x); 34 print_r($b1); 35 print_r($b2); 36 37 $d = func($a1, $a2, $b1, $b2, $c1); 38 39 print "関数を呼んだ後\n"; 40 printf("\$a1 %d \$a2 %d \$c1 %d \$d %d\n", $a1, $a2, $c1->x, $d); 41 print_r($b1); 42 print_r($b2);
関数を呼ぶ前 $a1 1 $a2 2 $c1 1 Array ( [0] => 10 [1] => 20 ) Array ( [0] => 10 [1] => 20 ) 関数を呼んだ後 $a1 1 $a2 12 $c1 1000 $d 33 Array ( [0] => 10 [1] => 20 ) Array ( [0] => 100 [1] => 20 )
01 /****************************/ 02 /* 関数(関数名) */ 03 /* coded by Y.Suganuma */ 04 /****************************/ 05 06 function add($s1, $s2) { 07 $s = $s1 + $s2; 08 return $s; 09 } 10 11 function sub($s1, $s2) { 12 $s = $s1 - $s2; 13 return $s; 14 } 15 16 function add_sub($fun, $s1, $s2) { 17 $s = $fun($s1, $s2); 18 return $s; 19 } 20 21 printf("%d\n", add(2, 3)); // 出力: 5 22 $kasan = "add"; // シングルクォーテーションマークでも可,以下同様 23 printf("%d\n", $kasan(2, 3)); // 出力: 5 24 printf("%d\n", add_sub("add", 2, 3)); // 出力: 5 25 printf("%d\n", add_sub("sub", 2, 3)); // 出力: -1
01 /****************************/
02 /* クラスと継承 */
03 /* coded by Y.Suganuma */
04 /****************************/
05 class Number
06 {
07 public $name; // var $name;
08 protected $feat; // var $feat;
09 function __construct($str = "数") // コンストラクタ
10 // function Number($str = "数") // コンストラクタ
11 {
12 $this->name = $str;
13 $this->feat = "数とは,・・・";
14 }
15 function out()
16 {
17 echo "Number クラスの定義です\n";
18 }
19 }
20
21 class Complex extends Number
22 {
23 private $r_part; // var $r_part;
24 private $i_part; // var $i_part;
25 function __construct($x, $y, $str = "複素数") // コンストラクタ
26 // function Complex($x, $y, $str = "複素数") // コンストラクタ
27 {
28 parent::__construct($str); // 親のコンストラクタ
29 // parent::Number($str); // 親のコンストラクタ
30 $this->r_part = $x;
31 $this->i_part = $y;
32 }
33 function out()
34 {
35 echo $this->feat."\n";
36 echo "($this->r_part, $this->i_part)\n";
37 }
38 }
39
40 $y = new Number();
41 echo $y->name."\n";
42 //echo $y->feat."\n"; 参照できない
43
44 $x = new Complex(1.0, 2.0);
45 echo $x->name."\n";
46 $x->out();
47 //echo $y->r_part."\n"; 参照できない
final function out()
数 Number クラスの定義です 複素数 数とは,・・・ (1, 2)
01 /****************************/ 02 /* オブジェクトの複製 */ 03 /* coded by Y.Suganuma */ 04 /****************************/ 05 class Complex { 06 public $r_part; 07 public $i_part; 08 function __construct($x, $y) 09 { 10 $this->r_part = $x; 11 $this->i_part = $y; 12 } 13 } 14 15 class Example { 16 public $x; 17 public $y; 18 public $c; 19 function __construct($x, $y) 20 { 21 $this->x = $x; 22 $this->y = $y; 23 $this->c = new Complex($this->x, $this->y); 24 } 25 } 26 // 基本オブジェクト 27 echo " 基本オブジェクト\n"; 28 $e1 = new Example(1, 2); 29 echo '$x '.$e1->x.' $y '.$e1->y."\n"; 30 echo '$c ('.($e1->c)->r_part.', '.($e1->c)->i_part.")\n"; 31 // $e1 を $e2 に代入後,$e2->y を 20,($e2->c)->r_part を 100 に変更 32 echo ' $e1 を $e2 に代入後,'."\n"; 33 echo ' $e2->y を 20,($e2->c)->r_part を 200 に変更'."\n"; 34 $e2 = $e1; 35 $e2->y = 20; 36 ($e2->c)->r_part = 200; 37 echo '$x '.$e1->x.' $y '.$e1->y."\n"; 38 echo '$c ('.($e1->c)->r_part.', '.($e1->c)->i_part.")\n"; 39 // $e1 のクローン $e3 を作成後,$e3->y を 30,($e3->c)->r_part を 300 に変更 40 echo ' $e1 のクローン $e3 を作成後,'."\n"; 41 echo ' $e3->y を 30,($e3->c)->r_part を 300 に変更'."\n"; 42 $e3 = clone $e1; 43 $e3->y = 30; 44 ($e3->c)->r_part = 300; 45 echo '$x '.$e1->x.' $y '.$e1->y."\n"; 46 echo '$c ('.($e1->c)->r_part.', '.($e1->c)->i_part.")\n";
$a = $b; $b = 10;
基本オブジェクト $x 1 $y 2 $c (1, 2) $e1 を $e2 に代入後, $e2->y を 20,($e2->c)->r_part を 200 に変更 $x 1 $y 20 $c (200, 2) $e1 のクローン $e3 を作成後, $e3->y を 30,($e3->c)->r_part を 300 に変更 $x 1 $y 20 $c (300, 2)
01 <?php 02 03 /****************************/ 04 /* 変数の有効範囲(スコープ) */ 05 /* coded by Y.Suganuma */ 06 /****************************/ 07 08 /*******************/ 09 /* クラス Example1 */ 10 /*******************/ 11 class Example1 { 12 private $pri; 13 protected $pro; 14 public $pub; 15 16 function Example1() { 17 $this->pub = 1000; 18 $this->pri = 2000; 19 $this->pro = 3000; 20 } 21 22 function sub1() { 23 printf("sub1 pub %d pri %d pro %d\n", $this->pub, $this->pri, $this->pro); 24 } 25 } 26 27 /*******************/ 28 /* クラス Example2 */ 29 /*******************/ 30 class Example2 extends Example1 { 31 function sub2() { 32 printf("sub2 pub %d pro %d\n", $this->pub, $this->pro); 33 // printf("sub2 pri %d\n", $this->pri); // 許されない 34 } 35 } 36 37 /****************/ 38 /* main program */ 39 /****************/ 40 // ブロック 41 $x = 10; 42 $z = 30; 43 if ($x > 5) { 44 printf("block x %d\n", $x); 45 $x = 15; 46 $y = 20; 47 printf("block x %d\n", $x); 48 printf("block y %d\n", $y); 49 } 50 else { 51 printf("block x %d\n", $x); 52 $x = -15; 53 printf("block x %d\n", $x); 54 } 55 sub(); 56 printf("x %d\n", $x); 57 printf("y %d\n", $y); // 最初の x が 1 の時は,y が未定義のためエラー 58 // クラス 59 $ex = new Example2(); 60 $ex->sub1(); 61 $ex->sub2(); 62 printf("public member( pub ) %d\n", $ex->pub); 63 64 /************/ 65 /* 関数 sub */ 66 /************/ 67 function sub() 68 { 69 $x = 40; 70 printf(" sub x %d\n", $x); 71 global $z; 72 printf(" sub z %d\n", $z); 73 } 74 75 ?>
block x 10 block x 15 block y 20 sub x 40 sub z 30 x 15 y 20
sub1 pub 1000 pri 2000 pro 3000 sub2 pub 1000 pro 3000 public member( pub ) 1000
情報学部 | 菅沼ホーム | 目次 | 索引 |