【待望】PerlユーザのためのPHP入門 (601レス)
1-

1
(2): 俺様 03/02/27 15:17 ID:tJsRCtRD(1/9) AAS
見事Perl→PHPへの脱皮に成功した俺様が
両者の違いを中心に講義してやる。
今までPerlマンセーだったやつはこれを機にPHPに変更しよう也。
質問もガンガン書いてくれ。
このPerlの文はPHPだとどう書くの?とか。
2
(2): 03/02/27 15:19 ID:??? AAS
このスレ結構ありがたいかも。
>>1
ありが?
3
(1): 俺様 03/02/27 15:19 ID:tJsRCtRD(2/9) AAS
まず、両者には似てる部分も非常に多いというのは特徴だ。
例えば変数の宣言、初期化をしてみよう。
$foo = 0;
頭に$をつけるところも、型を特に指定する必要がないことも、
文末は;になることもみんな一緒だ。

ほら、簡単に移行できそうに思えてきただろ?
4: 俺様 03/02/27 15:31 ID:tJsRCtRD(3/9) AAS
とりあえずHello, world!を出力してみるぞ。

<?
print "Hello, world!\n";
?>

printの意味はperlと一緒だ。
まあ、printよりecho使う人が多いがそんなに違いはない。
perlユーザならわかりやすい方が(・∀・)イイ!だろう。

プログラムの開始と終了は<?と?>で囲むんだ。
これはPHP特有だから早く覚えよう。
<?じゃなくて<?phpで囲んでもOK。将来XMLとの連携を考えるなら
後者で書く癖をつけたほうが良いとは言われている。
5: 03/02/27 15:37 ID:8ZVFA0UH(1) AAS
↓↓↓↓↓★ココだ★↓↓↓↓↓
外部リンク[html]:www.pink-angel.jp
6
(1): [___] 03/02/27 15:39 ID:??? AAS
PHPでrequireするファイルは必ず<?php ?>で囲まなきゃダメ?
7: 俺様 03/02/27 15:50 ID:tJsRCtRD(4/9) AAS
とりあえずCGIじゃなくてmod_phpを使っていこう。
例えばCGI/Perlの場合、

#!/perl/bin/perl
print "Content-type: text/html\n\n";
print "Hello, world!\n";

簡単なテストスクリプトを書くときも2行目あたりのウザイのを
書く必要があったがmod_phpならそんな必要はない。
とにかく<?と?>で囲めばOKだ。

というわけで課題として、各自ローカルサーバにPHPをインストールしておこう。
PerlユーザならApacheはインストールしてあると思うのでそれを前提とすると、

外部リンク[php]:www.php.net
上記サイトにある
Windows Binaries
PHP 4.3.1 zip package [5,853Kb]
を落とすのじゃ。下のPHP 4.3.1 installerの方が楽そうに見えるが
こっちはCGI/PHPとしてしか使えないから駄目。間違えるなよ。
8: 俺様 03/02/27 15:55 ID:tJsRCtRD(5/9) AAS
>>6
どういう用途で用いるのか知らんが
PHPスクリプトをrequire()するなら当然
そっちも<? ?>は必要だぞ。

まあ、聞くより自分で確かめたほうが早いだろう。
9
(1): 俺様 03/02/27 15:59 ID:tJsRCtRD(6/9) AAS
PHPのインストールについては
詳しく解説しているところを見たほうが早いか。
始めたばかりの頃俺が参考にした所だ。

外部リンク[php]:www.php-j.com

では各自ローカルでPHPを動かせるようにしておきましょう。
その瞬間からPerlとはおさらばだ!
10: 03/02/27 16:05 ID:??? AAS
俺様、がんがれよ。
11
(1): 03/02/27 17:01 ID:+18aFIzU(1) AAS
win用をインスコしたいのですが
ここ以外にバイナリって無いんですか?
外部リンク[php]:www.php.net
12: 俺様 03/02/27 17:15 ID:tJsRCtRD(7/9) AAS
>>11
そこのじゃ嫌なのか?
そこからで全然問題ないと思うが。
13: 03/02/27 17:57 ID:??? AAS
おお,このスレはありがたい.がんがってください.
14: 03/02/27 18:00 ID:oT8eTv8K(1) AAS
期待age
15: 俺様 03/02/27 20:27 ID:tJsRCtRD(8/9) AAS
CGI/Perlの場合は
能や予、表などの漢字を使うときに文字化けしないように
\能、\予、\表みたいな面倒な書き方をする必要があっただろう。

PHPでは大半の人がEUCの日本語コードで記述していて
そのような必要はない。

と、言うわけでEUCを読み書き・保存できるエディタを用意しておきましょう。
例えば、Windows標準のメモ帳では無理です。

まあ、ベクターとかでEUCって検索すればすぐに見つかる。
外部リンク[php3]:channel.goo.ne.jp

シェアウェアのものでよいならば秀丸やEmEditorがお奨め。
16
(1): 03/02/27 21:11 ID:??? AAS
質問なんですけど、
関数の引数にハッシュを使う方法ってありますか?
function func($key,$value){
return "$key => $value";
}
$result = func("key"=>"value");
みたいにやりたいのですが
Parse error: parse error, unexpected T_DOUBLE_ARROW
というエラーがでました。

function func($key=>$value){
return "$key => $value";
}
でも無理でした。
17: 俺様 03/02/27 21:36 ID:tJsRCtRD(9/9) AAS
>>16
PHP固有の質問はこっちへ書き込もうぜ。

【PHP】質問スレッド Part7
2chスレ:php
18
(5): 03/02/28 04:10 ID:??? AAS
(PerlCode)
$name="john";
$say=sub{return "My name is $_[0].";};
print &{$say}($name);

はPHPで書くとどうなりますか?
19: 03/02/28 06:25 ID:??? AAS
>>18
俺のPerl自慢。

                  つづく
20
(2): 03/02/28 08:36 ID:??? AAS
>>18
<?php
$name = "jhon";
function say($name) {return("My name is $name");}
echo say($name);
?>
21: 03/02/28 09:16 ID:TC5rJBdj(1) AAS
そんなもんをXHTMLに埋め込んだら、見苦しくて死ぬぞ。
ブラウザでパースもできんようになるし。
MVCにしろや。
22: 俺様 03/02/28 10:31 ID:??? AAS
>>20
お答えサンクス。

と、いうわけでもうインストールはばっちしだと思うので
今日はユーザー定義関数についてから話そう。
超独自仕様のPerとの大きな違いの1つだ。
まあ、はっきり言っちゃえば
>>18みたいな書き方はPerlではごく普通だが
Perl知らない人から見れば何なのかさっぱりってほど特殊だ。
それに比べてPHPの>>20は他の言語
(例えばJavaとか)しか知らない人が見ても何となく理解できるだろう。
23: 18 03/02/28 10:35 ID:??? AAS
>>20
レスどうもです。

無名サブルーチンみたいなのが使いたいなと思っていたのですが、
create_function関数というのがあるみたいですね。
外部リンク[php]:www.php.net

<?php
$name="john";
$say=create_function('$name','return "My name is $name.";');
print $say($name);
?>
24: 俺様 03/02/28 10:51 ID:??? AAS
Perlでは関数でなくサブルーチンと呼ばれていたな。

sub foo {
print "$_[0] ";
return $_[0]+100;
}
$b= &foo(100)
print $b;;
#100 200
-------------------
function foo($a) {
print "$a ";
return $a+100;
}
$b= foo(100);
print $b;
#100 200

PHPの場合は明示的に引数を記述しておく必要がある。
可変引数は配列を渡せば良いだろう。Perlも実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。
25: 俺様 03/02/28 11:03 ID:0fBPA0cl(1/5) AAS
いちいち引数を書くとは面倒になったと言う人もいるだろうが、
おかげでデフォルト引数を簡単に実現できる。

<?php
function foo2($a ="俺様") {
print "$a は凄い<br>";
}
foo2("お前");
foo2();
?>

/*
お前 は凄い
俺様 は凄い
*/
引数を指定しなかったら勝手に俺様が凄くなってくれるのだ。
26
(1): 03/02/28 11:04 ID:??? AAS
講座スレ作ろうとする奴って大体理論が崩壊してるよな・・・。
27: 03/02/28 11:04 ID:??? AAS
Perlでは関数でなくサブルーチンと呼ばれていたな。

sub foo {
print "$_[0] ";
return $_[0]+100;
}
$b= &foo(100)
print $b;;
#100 200
-------------------
function foo($a) {
print "$a ";
return $a+100;
}
$b= foo(100);
print $b;
#100 200

PHPの場合は明示的に引数を記述しておく必要がある。
可変引数は配列を渡せば良いだろう。Perlも実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。
28
(2): 俺様 03/02/28 11:08 ID:0fBPA0cl(2/5) AAS
これかいてる間に重要なこと思い出した。

#Perl code
$a=26;
print "$aゲット";

#26ゲット
-------------
#PHP code
$a=26;
print "$aゲット";

#(何も表示されない)
----------------------

両者にはこのような違いが起きてしまう。
下はどうすればよいのか各自考えてみましょう。

出かけるので解答は夜で。
29: 俺様 03/02/28 11:09 ID:0fBPA0cl(3/5) AAS
26ゲットできなかったヽ(`Д´)ノ
30
(1): 俺様 03/02/28 11:10 ID:0fBPA0cl(4/5) AAS
>>26
俺様はPHP歴浅いので
崩壊どころか理論自体形成されていない。
だからこのスレタイは入門だ。
間違いはがんがん指摘してクレイ!
31: 03/02/28 11:13 ID:njt3nQcM(1) AAS
>>30
俺はPHPすら分からない。
だから、がんがん解説してクレイ!
32
(3): 03/02/28 11:19 ID:??? AAS
結構見やすいPerl/PHPの構文比較のページ見つけました。

Perl/Php Translation
外部リンク:www.cs.wcupa.edu

既出だったらゴメン。
33: 俺様 03/02/28 11:21 ID:0fBPA0cl(5/5) AAS
>>32
それは便利だな。
では今後はそこに載ってないやつを指摘していくことにしよう。
34: 03/02/28 11:25 ID:??? AAS
>>18
<?php
$name = "jhon";
function say($name) {return("My name is $name");}
echo say($name);
?>
35: 03/02/28 11:26 ID:??? AAS
Perlでは関数でなくサブルーチンと呼ばれていたな。

sub foo {
print "$_[0] ";
return $_[0]+100;
}
$b= &foo(100)
print $b;;
#100 200
-------------------
function foo($a) {
print "$a ";
return $a+100;
}
$b= foo(100);
print $b;
#100 200

PHPの場合は明示的に引数を記述しておく必要がある。
可変引数は配列を渡せば良いだろう。Perlも実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。
Perlでは関数でなくサブルーチンと呼ばれていたな。

sub foo {
print "$_[0] ";
36
(1): 03/02/28 11:32 ID:??? AAS
>>28
変数名の後ろは全角文字でもダメみたいですね。
(半角の「.」はOKだった)

#PHP code
$a=26;
print $a."ゲット";

#26ゲット

#PHP code
$a=26;
print "$a.ゲット";

#26.ゲット
37
(1): 03/02/28 11:33 ID:??? AAS
>>28
print "${a}ゲット";
print $a."ゲット";
echo $a,"ゲット";
38: 03/02/28 12:12 ID:??? AAS
Perlでは関数でなくサブルーチンと呼ばれていたな。

sub foo {
print "$_[0] ";
return $_[0]+100;
}
$b= &foo(100)
print $b;;
#100 200
-------------------
function foo($a) {
print "$a ";
return $a+100;
}
$b= foo(100);
print $b;
#100 200

PHPの場合は明示的に引数を記述しておく必要がある。
可変引数は配列を渡せば良いだろう。Perlも実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。
Perlでは関数でなくサブルーチンと呼ばれていたな。

sub foo {
print "$_[0] ";
 
39: 03/02/28 12:41 ID:??? AAS
シフトJISでがんがん書いてます。
40: 俺様 03/02/28 20:06 ID:R6lXT7Vm(1/2) AAS
AA省
41
(1): 俺様 03/02/28 20:12 ID:R6lXT7Vm(2/2) AAS
些細なことに見えるが、
自分はこのせいで某スクリプトを
PerlからPHPに移植する際に、
30分ぐらい睨めっこした記憶があるので。
頭の中に入れて起きましょう。

$a=26;
print "{$a}ゲット";
print $a."ゲット";
42
(2): 03/03/01 11:16 ID:5K/2+grl(1/2) AAS
先生質問です。
>>9の通りしましたがapacheが起動できません。
どうやらhttpd.confのLoadModule php4_module C:/php/sapi/php4apache.dllが原因のようです
php4apache.dllをphp4apache2.dllとしても同じでした。

WinME Apache2.0.39です
43
(1): 03/03/01 11:44 ID:??? AAS
>>42
OS側類。
44
(2): 俺様 03/03/01 12:12 ID:UE12tRyA(1/12) AAS
>>42
Apacheは2よりも1.3.27の方がいいと思う。
後はなんだろな〜
Meなんて怪しいOS使ったことないからな。
とりあえずApacheのバージョンを変えて試してみてクレイ。
45: 03/03/01 12:41 ID:5K/2+grl(2/2) AAS
>>44
ありがとうございます。1.3.27を使ったら起動できました。
46: 03/03/01 16:35 ID:??? AAS
AA省
47
(1): 03/03/01 16:36 ID:??? AAS
>>44
OS = Windowsとか思っている痛い講師がいるクソスレはココですか。
48
(1): 俺様 03/03/01 17:05 ID:UE12tRyA(2/12) AAS
>>47
世の中は理詰めだけでは解決しない。
理論ヲタになるより、わかりやすさを求める方が現実的だ。
わかるかい?
しかも、PHPと直接は関係ない。
君は文学者がテイラー展開を出来なかったら馬鹿にするだろうか?

では、今日はいよいよ変数のスコープについての説明だ。
あくまでも対象者は基本的に『Perlしか』やったことがない人のみ。
C言語など他の言語をやっている人には馬鹿見たく思われる説明になるからだ。
49
(1): 03/03/01 17:07 ID:??? AAS
>>48
>君は文学者がテイラー展開を出来なかったら馬鹿にするだろうか?

少なくとも数学者を目指す文学者がマクローリン展開を知らなければバカにするが。
50
(2): 俺様 03/03/01 17:30 ID:UE12tRyA(3/12) AAS
>>49
俺様はべつにオペレーティングシステムのエキスパートを目指してはいないッポ。

#Perlscript

sub foo{
$a = 100;
print "$a,";
$a++;
}

&foo();
print $a;

#100,101

まあ、当たり前の結果が表示されます。
これをPHPに書き換えてみましょう。
51
(1): 俺様 03/03/01 17:34 ID:UE12tRyA(4/12) AAS
#PHPscript

<?php
function foo(){
$a = 100;
print "$a,";
$a++;
}

foo();
print $a;

?>
# 100,

何故か100しか表示されません!??( ̄□ ̄;)ナント!!
どうして後ろの$aは表示されなかったのでしょうかという問題です。
52: 俺様 03/03/01 17:41 ID:UE12tRyA(5/12) AAS
同様の例です。

#Perl

sub hoge{
print $a;
}
$a="俺様";
&hoge;
----------
#PHP

function hoge(){
print $a;
}
$a="俺様";
hoge();

Perlの方だと見事、俺様と表示されるのですが、
後者の方は何も表示されないので吃驚仰天です。
53
(2): 03/03/01 17:47 ID:??? AAS
>>50
>俺様はべつにオペレーティングシステムのエキスパートを目指してはいないッポ。

いや、エンジニアでなくても車=ベンツとか思ってる奴はアホなわけで。

教養ではなく常識なのよ。常識。
54
(2): 03/03/01 18:26 ID:??? AAS
>>53
邪魔。キエロ
55
(1): 03/03/01 18:33 ID:??? AAS
>>54
どうしていつものコテハンを使わないんですか?
56
(1): 03/03/01 18:58 ID:??? AAS
>>55
ごめんごめん。かんじよめないんだ?
ジャマ。キエロ
57: 俺様 03/03/01 19:04 ID:UE12tRyA(6/12) AAS
>>54>>56
(・∀・)カエレ!!
せっかくこのスレを良い感じにしたいのだから
煽りはよそでやってクレイ。
58: 俺様 03/03/01 19:06 ID:UE12tRyA(7/12) AAS
>>53
まあ、教養が無かった俺様が厨ってことで
その話題は終わりにしよう。スレ違いだし。
59: 03/03/01 19:09 ID:xu/mDseR(1) AAS
↓↓↓↓↓★ココだ★↓↓↓↓↓
外部リンク[html]:www.pink-angel.jp
60
(1): 03/03/01 19:29 ID:??? AAS
>>50-51
Perlがデフォルトでグローバル変数なのに対して、
PHPでは、デフォルトでローカル変数だから。

#PHPscript
<?php
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
?>


#Perlscript
sub foo{
my $a = 100;
print "$a,";
$a++;
}
&foo;
print $a;

と同じ
#始めたばかりなので全く同じかどうかとか用語の使い方は正しくないかもしれません
61: 03/03/01 19:56 ID:??? AAS
#PHPscript
<?php
$a = 999;
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
?>
#100,999

なーる。
62: 俺様 03/03/01 19:58 ID:gsC9ephA(1/2) AAS
>>60
(*゚▽゚ノノ゙☆パチパチ

Perlにおいていわゆるmyを付けた場合が
PHPでは標準になっています。
C言語などの場合はコンパイル時に
未定義(未宣言)の変数だ!ってエラーを出してくれるのですが、
PHPではそのまま初期値(文字なら空白、数字なら0)として
認識してしまうので注意しましょう。

結構すんなり受け入れられるのかなー?
普段からmyを使ったりしている人なら問題ないだろうけど
プログラミング言語をPerlしかやってないでグローバルなのが当たり前だって
思ってた人には受け入れるのに時間が掛かるかもしれない。

そんなことないか?どうだろう。
63
(1): 03/03/01 20:01 ID:Ddm3hU+C(1) AAS
Perlってなんて読むの?
64: 俺様 03/03/01 20:08 ID:gsC9ephA(2/2) AAS
逆にPerlの標準のようにグローバル(大域)変数として
扱いたい場合も書いておきましょう。
これはCやJavaとも違う仕様ですね。
関数内の最初でglobalと宣言します。
なお、PHPの設定でregister_globalsをonにすると
また違うようなのですが、デフォルトはoffで推奨となっているのでそれに従います。

<?php
$a = 999;
function foo(){
global $a; //これでグローバルスコープの$aを参照しますよと宣言している。
print "$a,";
$a++;
}
foo();
print $a;
?>
#999,1000

因みに、function foo()はどこに書いてもOKです。
(PHP3だったころは駄目だったとか・・・)

>>63
[p:(r)l]
65: 俺様 03/03/01 20:25 ID:UE12tRyA(8/12) AAS
Perlには静的(スタティック)変数が無かったと思うので
それについても書いておきましょう。

function foo(){
static $a=0;
print $a;
$a++;
}

for($i=0;$i<5;$i++){
foo();
}

#01234

このようにすると
最初にfoo()が呼ばれたときのみstatic $a=0が呼ばれてくれるのです。
以降、foo()が呼ばれるたびに$aは1ずつ増加してくれます。
staticをつけないと毎回0が出力されてしまいますね。
変数のスコープは関数内のみなのに値を保持していてくれるわけです。
globalでは無いので関数外部から直接$aの値をいじることは出来ません。
66
(2): 生徒B 03/03/01 20:39 ID:??? AAS
perlの use strict; のような未定義変数をチェックする方法はPHPに無いのでしょうか。
67
(1): 03/03/01 20:50 ID:??? AAS
{
my $static = 0;
sub foo () {
return ++$static;
}
}
68
(1): 03/03/01 21:03 ID:b+i+15ud(1) AAS
だめだ・・・functionの時点でわからそ。
69
(1): 俺様 03/03/01 21:27 ID:UE12tRyA(9/12) AAS
>>66
すまんが俺様は知らんな。
全ての定義済の変数を配列で返すような
関数ならあるが。

<?php
$def_arr= get_defined_vars();
//初期設定(_SERVER["SERVER_ADDR"]のようなもの)
//を含む全ての定義済みの変数の配列を得る)

$a=3;
$abc=10;

$arr = get_defined_vars();
//初期設定のものに上の2つが追加された。

$new_arr = array_diff($arr,$def_arr);
//2つの配列の差を得る。

print_r($new_arr);//配列の内容を出力
?>

#Array ( [a] => 3 [abc] => 10 )
70: 03/03/01 21:29 ID:??? AAS

71: 俺様 03/03/01 21:32 ID:UE12tRyA(10/12) AAS
>>67
なるほど。Perlでstaticを実現した例ですね。
まあ、PHPの場合はわざわざ自前で作らなくても
最初からstaticという命令が用意されているということです。
72: 俺様 03/03/01 21:35 ID:UE12tRyA(11/12) AAS
>>68
Perlをある程度理解していれば
わかるようにしたいのだが、
(Perlも未経験という場合はちょっと厳しいです。)
どこら辺がわからんだろうか?
とりあえずPerlのsubをfunctionに置き換えちゃえばOKだ。
73: 03/03/01 21:35 ID:??? AAS
 
74: 生徒B 03/03/01 21:56 ID:??? AAS
>>69
どもども。
ちょっと面倒ですね。
75: 03/03/01 22:00 ID:??? AAS

76
(2): 03/03/01 22:12 ID:??? AAS
>>66
error_reporting(E_ALL);
でどうかな。
77: 03/03/01 22:16 ID:??? AAS
     
78: 生徒B 03/03/01 22:22 ID:??? AAS
<?php
error_reporting(E_ALL);
print $a;
?>
#<b>Notice</b>: Undefined variable: a in <b> (filename)
# </b> on line <b>3</b><br />

>>76
ありがとう。うまくいきました。
79: 03/03/01 22:23 ID:??? AAS

80: 俺様 03/03/01 22:30 ID:UE12tRyA(12/12) AAS
>>76
(・∀・)イイ!

φ(.. )メモシテオコウ
error_reporting(E_ALL);
81: 03/03/01 22:35 ID:??? AAS
あいだに空を入れる人生。色即是空(w
82: 03/03/02 00:05 ID:??? AAS

83: 俺様 03/03/02 19:03 ID:SRraTB8e(1/3) AAS
よっしゃ!早くも寂れてきたぞ。今日は配列について書いておこう。

まず、Perlの場合配列値を表す変数は先頭が$でなく@になっていた。
しかしPHPではそんな面倒なことはない。どんな場合でも先頭は$でOKだ!
凄い楽そうだろ?(祝

初期化の差はこんな感じだ。

#Perl
@a = (20,10,30,3);

#PHP
$a = array(20,10,30,3);

arrayって余計な文字が付いたが細かいことは気にするな。
84: 俺様 03/03/02 19:10 ID:SRraTB8e(2/3) AAS
驚くことにPHPでは

$a[] = "a";
$a[] = "b";
$a[] = "c";

$a[0] = "a";
$a[1] = "b";
$a[2] = "c";

この2つが同じ意味となるのだ。
角括弧内の数字を省略した場合、
値は配列に最後の要素として勝手に追加してくれる。
まあ、こういう独自仕様は混乱の元だから俺は上の形式で書いたことは無いがな。
わかった上で使うなら利用場面は結構多いかもしれない。
85: 03/03/02 19:12 ID:L99j8QKU(1) AAS
↓↓↓↓↓★ピンクエンジェル★↓↓↓↓↓
外部リンク[html]:www.pink-angel.jp
86: 俺様 03/03/02 19:19 ID:SRraTB8e(3/3) AAS
配列の関数一つ一つ説明するのは面倒だから
あとは>>32のサイトや公式のマニュアルでも読んでくれ。
Perlで実現できてたことの代替手段は大体存在してる。
87: 俺様 03/03/02 19:26 ID:FrxqKaYz(1/3) AAS
多次元配列は一つ注意を。
これは前も似たようなこと言ったが

$a[0][1] = 41;
print "$a[0][1]";

Perlだと期待する結果41が出力されるが、
PHPだとArray[1]という怪しげな結果が出力されてしまう。
後ろの[1]はただの文字列として認識されてしまっているようなのだ。
以下のどちらかにしないといけない。

$a[0][1] = 41;
print "{$a[0][1]}";
print "".$a[0][1];
88: 俺様 03/03/02 19:28 ID:FrxqKaYz(2/3) AAS
まあ、おかしくなったらまずは変数を{}で括ってみろってことだ。
89
(1): 03/03/02 19:51 ID:??? AAS
@a{qw(a b c)} = @b[1..3];
こういうのはどう書く?
90: 03/03/02 20:32 ID:??? AAS

91: 俺様 03/03/02 21:07 ID:FrxqKaYz(3/3) AAS
>>89
うーん、よくわからんな(汗
誰かわかる人募集中だ!

まあ、とりあえず根性で全部書いておけ。
$a = array(
"a" => $b[1],
"b" => $b[2],
"c" => $b[3],
)
92: 03/03/02 23:06 ID:??? AAS
なんで、空投稿するんだよ。見ずらいんだよ。
93: 03/03/02 23:16 ID:??? AAS
日本語すら満足に書けない俺様が講師のクソスレはここですか?

見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
94: [ ] 03/03/02 23:20 ID:??? AAS
ねちっこいね。うざいというかきもい。
95: [ ] 03/03/02 23:27 ID:??? AAS
AA省
96: 03/03/02 23:31 ID:??? AAS
見づらいんだよ。でした。すまん。
俺は「俺様」じゃないです。
97
(4): 03/03/03 04:20 ID:??? AAS
普通に見てる人もいるんで、煽ってるやつらマジでどっかいって。
98
(4): 03/03/03 08:39 ID:??? AAS
>>97
普通にウザがってる人もいるんで自分のサイトでやるように説得してください。
99: 俺様 03/03/03 10:08 ID:gt/b6+qo(1/11) AAS
煽りでもレスが付かないよりは大歓迎だ!
>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。
100: 俺様 03/03/03 10:33 ID:gt/b6+qo(2/11) AAS
今日はオブジェクト指向について書いておこう。
PHPもPerlもJavaやC++に代表されるオブジェクト指向言語である。

Perlのオブジェクト指向についてあまり知らないんですが、
Javaに比べるとPHPのオブジェクト指向に関する仕様は
             ショボイ!!!!
今年中に出る予定のPHP5で大幅に機能がアップするらしいので
それに期待しましょう。
101: 俺様 03/03/03 10:48 ID:gt/b6+qo(3/11) AAS
まず、誰でも最初に疑問に思うのが
オブジェクト指向を用いるメリットは何か?
ということだ。

再利用ができる?
そんなのオブジェクト指向じゃなくてもしてるじゃないか。
我々はprintという出力命令を何度も利用している。
printの命令が内部でどういう仕組みになっているか調べたことのある人は極少数だろう。
102
(1): 俺様 03/03/03 11:12 ID:gt/b6+qo(4/11) AAS
まあ、オブジェクト指向をうまく使えば
再利用『しやすく』はなるだろう。

まず、カプセル化(データ隠蔽)というものがある。
人間というオブジェクトの例で考えてみよう。
人間は体重というデータを持っているが
我々は外見から見ただけでは体重を正確には知れない。
例えば、彼に『体重計に乗れ』ってメッセージを送れば
正確な体重を得ることが出来る。
同様に体重に『直接』アクセスして値を変えることは出来ない。
彼に『〜を食べろ』ってメッセージを送れば
その食べた分だけ体重が増加してくれるのである。

つまり、内部で保持しているデータを隠蔽できて、
見たり変えたりするには間接的にアクセスする必要があるということなのだが、

PHPではアクセサ(アクセス制限)の概念が存在しないため
このカプセル化があっさり崩壊してしまう。
103: 俺様 03/03/03 11:35 ID:gt/b6+qo(5/11) AAS
再利用のためのもう一つの便利な機能は『継承』だろう。
既存のクラスのフィールド(データ)やメソッド(機能)を引き継いで、
その上で既存の機能を修正したり新たに追加したりできるようになる。
まあ、言い方を変えれば『継ぎはぎ』みたいなものだ。

PHPでは多重継承が存在しない。
つまり、あるクラスに対して1つの親クラスからしか
フィールドやメソッドを引き継げないということだ。
同じく多重継承が禁じられているJavaではこのようなことがしたければ
interfaceで代替が可能だが、
PHPではその代替案すら用意されていない。

多重継承なんかしなくてもプログラムは作れるという主張も根強いが、
まあ、それを言ったら継承なんかしなくてもプログラムを作れる
と言っても同じようなことである。
104: 俺様 03/03/03 12:07 ID:gt/b6+qo(6/11) AAS
1つぐらいサンプルを書いてみよう。
因みに、このように変数に日本語使っても大丈夫だ。
(普段はお奨めしない。)

<?php
class 人{ //クラス名
var $体重; //フィールド
function 人($値){ //コンストラクタ(初期化)
$this->体重=$値; //値をフィールドへ代入
}
function 体重計に乗る(){ return $this->体重;} //体重を出力するメソッド
function 食べる($量){ $this->体重+=$量;} //体重を量だけ加える
}

$俺様=new 人(60);
print $俺様->体重計に乗る();
print ",";
$俺様->食べる(0.5);
print $俺様->体重計に乗る();
#60,60.5
?>
105: 俺様 03/03/03 12:10 ID:gt/b6+qo(7/11) AAS
クラス内で自分自身のフィールドにアクセスするのにも
$this->体重
このように$thisとかいうものが必要なのだ。
(Javaの場合は省略可能)
これは長いコードを書こうとするとわかるが面倒すぎ。
106
(1): 俺様 03/03/03 12:16 ID:gt/b6+qo(8/11) AAS
ここで>>102で指摘した問題が起きる。
<?php
class 人{
var $体重;
function 人($値){
$this->体重=$値;
}
function 体重計に乗る(){ return $this->体重;}
function 食べる($量){ $this->体重+=$量;}
}

$俺様=new 人(60);
$俺様->体重 = 200; //おいおい、勝手に体重変えられたYO!
print $俺様->体重; //体重計使わなくても調べられるのかYO!
#200 俺は相撲取りじゃねえYO!
?>

てなわけで体重計とかのメソッドを作る意味がなくなってしまうのだ。
(Javaの場合はフィールドの前にprivateを付けるなどすれば
このような直接アクセスを防ぐことが出来る。)
107: 俺様 03/03/03 12:26 ID:gt/b6+qo(9/11) AAS
コンストラクタと言うのは結構便利なんだがな。
<?php
class 人
{
var $体重;
function 人($値){
if($値<0) print "( ´,_ゝ`)プ";
else $this->体重=$値;
}
}

$俺様=new 人(-20);
#( ´,_ゝ`)プ
?>

このように体重に負の値が入れられるのを
防ぐことが出来る。
まあ、>>106のようにされたら結局は意味が無いのだが・・・
108: 俺様 03/03/03 12:30 ID:gt/b6+qo(10/11) AAS
というわけで長くなったが
PHPのオブジェクト指向は
現在の仕様では大したことがないということで
積極的に使う必要は無いだろう。
機能をグループ化したい人とか、
『何となくかっこいいことしたい人とか』
(ただし、使い方を誤ると逆にかっこ悪くなる)
にはしても損は無い程度だろうか。

いずれにしてもPHP5に期待。
109: 俺様 03/03/03 12:33 ID:gt/b6+qo(11/11) AAS
否定的なことばかり書いてたが
最近の本とか見るとメリットしか書いてなくて
オブジェクト指向マンセーになる奴が多すぎる気がするから
敢えて逆行して書いただけで、
メリットをもっと強調するのなら実際は
そこまでひどいわけでもないがな。
110: 03/03/03 23:34 ID:??? AAS
98 名前:nobodyさん 投稿日:2003/03/03(月) 08:39 ID:???
>>97
普通にウザがってる人もいるんで自分のサイトでやるように説得してください。

99 名前:俺様 投稿日:2003/03/03(月) 10:08 ID:gt/b6+qo
煽りでもレスが付かないよりは大歓迎だ!
>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。

98 名前:nobodyさん 投稿日:2003/03/03(月) 08:39 ID:???
>>97
普通にウザがってる人もいるんで自分のサイトでやるように説得してください。

99 名前:俺様 投稿日:2003/03/03(月) 10:08 ID:gt/b6+qo
煽りでもレスが付かないよりは大歓迎だ!
>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。
111: 03/03/03 23:34 ID:??? AAS
98 名前:nobodyさん 投稿日:2003/03/03(月) 08:39 ID:???
>>97
普通にウザがってる人もいるんで自分のサイトでやるように説得してください。

99 名前:俺様 投稿日:2003/03/03(月) 10:08 ID:gt/b6+qo
煽りでもレスが付かないよりは大歓迎だ!
>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。

98 名前:nobodyさん 投稿日:2003/03/03(月) 08:39 ID:???
>>97
普通にウザがってる人もいるんで自分のサイトでやるように説得してください。

99 名前:俺様 投稿日:2003/03/03(月) 10:08 ID:gt/b6+qo
煽りでもレスが付かないよりは大歓迎だ!
>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。
                           
112: 03/03/03 23:34 ID:??? AAS
98 名前:nobodyさん 投稿日:2003/03/03(月) 08:39 ID:???
>>97
普通にウザがってる人もいるんで自分のサイトでやるように説得してください。

99 名前:俺様 投稿日:2003/03/03(月) 10:08 ID:gt/b6+qo
煽りでもレスが付かないよりは大歓迎だ!
>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。

98 名前:nobodyさん 投稿日:2003/03/03(月) 08:39 ID:???
>>97
普通にウザがってる人もいるんで自分のサイトでやるように説得してください。

99 名前:俺様 投稿日:2003/03/03(月) 10:08 ID:gt/b6+qo
煽りでもレスが付かないよりは大歓迎だ!
>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。
 
113
(2): 03/03/04 02:34 ID:??? AAS
あんまり資源無駄に使ってるとアク禁食らっちゃうよー
114
(2): 03/03/04 05:05 ID:??? AAS
このスレすごく良いです。頑張ってください。
115
(1): 03/03/04 07:56 ID:6TNNfPas(1) AAS
>>113
同意。>>1は反省しる。

>>114
自作自演晒しage
116
(1): 俺様 03/03/04 10:17 ID:SJwb4sM+(1/4) AAS
オブジェクト指向に関するレスは0か。
まあ、使わなければならない機能でもないから放って置いてくれ。
今日はそろそろ具体的なHTMLドキュメントの作成方法に入っていこう。

>>113
気をつけます。
>>114
(TдT) アリガトウ
>>115
俺様は朝5時になんか起きれん。
117: 俺様 03/03/04 10:29 ID:SJwb4sM+(2/4) AAS
出力方法は何通りかあるので示しておきます。
自分が使いやすい方法を用いればよいだろう。

<?php
$title = "タイトル";
print "<html>";
print "<head>";
print "<title>$title</title>";
print "</head>";
print "<body>";
print "俺様のHTMLドキュメント";
print "</body>";
print "</html>";
?>

前も言ったように、CGI/Perlの場合は
print "Content-type: text/html\n\n";
こんなのが必要だったがmod_phpの場合は要らない。
上のスクリプトを書いてブラウザで開いてみれば
見事、俺様のHTMLドキュメントと出力される。
118: 俺様 03/03/04 10:50 ID:SJwb4sM+(3/4) AAS
資源無駄使いって言われたので
混合させてまとめて記述しちゃうか。
<?php
$title = "タイトル";
echo "<html>"; //echoも出力命令の1つ。printと同じようなものと思って良い。
echo("<head>"); //今まで省略してたけど()を付けても構わない。printも同様。

//C言語にあったprintfも使える。%3dなど書式をいろいろ設定できる。
//printやechoと違い、()が必須なので注意。
printf("<title>%s</title>",$title);
printf("</head>");

print <<<EOD //ヒアドキュメント。HTML部分が長くてprintとか書くのが面倒なとき便利
<body>
俺様のHTMLドキュメント
</body>
EOD; //ヒアドキュメント終了
print "</html>";
?>

ヒアドキュメントはPerlでも使っていた人は多いでしょう・
Perlでは↓のように書くが、PHPではセミコロンの位置が変わっているので
間違えないように注意しよう(重要)。
print <<EOD;
...
EOD
119: 俺様 03/03/04 11:00 ID:SJwb4sM+(4/4) AAS
因みに、PHPはHTML内に埋め込むことができると言うのを
利点として主張されることも多い。これは以下のように書けるからである。
<?php $title = "タイトル"; ?>
<html>
<head>
<title><?php $title ?></title>
</head>
<body>
俺様のHTMLドキュメント
</body>
</html>
このように必要な部分だけをPHPスクリプトとして認識させることが出来る。

コメントについても書いちゃおう。
Perlでは#のみだったがPHPではJavaなどで使われている以下の形式も可能である。
// コメント。#と意味は同じ。
/* これもコメント。複数行をコメントか出来るのが特徴。
つまりここもコメントになる。   */
120: 俺様 03/03/04 11:11 ID:hLFJ4wUF(1) AAS
この利点を利用すれば
簡単なカウンタなら
カウント保存用の空ファイルさえアップしておけば
ほんの数行であっという間に出来てしまうのだ。

明日はファイル入出力をやろう。
121: 03/03/04 12:54 ID:??? AAS
>>116
オブジェクト指向、興味あるよ?
122
(1): 03/03/04 18:41 ID:Nso2bqOx(1) AAS
手っ取りばやくお金もうけしましょう
外部リンク:www.h4.dion.ne.jp
日給2万円も無理じゃない!!!
123: 03/03/04 18:50 ID:??? AAS
>122
ねずみ講じゃないの?
124: 03/03/04 18:55 ID:QqzA7g89(1) AAS
外部リンク:www.agemasukudasai.com
125: 03/03/04 19:35 ID:??? AAS
香ばしいです、はい。
126
(2): 03/03/04 21:46 ID:??? AAS
OOの無いPHPを使う位なら俺はPerlを使う。
127
(1): 生徒B 03/03/05 01:20 ID:??? AAS
>>126
入門なんだから、大目に見てくださいな。
1-
あと 474 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.784s*