| 情報学部 | 菅沼ホーム | 目次 | 索引 |
<?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
| 情報学部 | 菅沼ホーム | 目次 | 索引 |