【待望】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との連携を考えるなら
省1
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はインストールしてあると思うのでそれを前提とすると、
省6
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){
省3
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) {
省11
25: 俺様 03/02/28 11:03 ID:0fBPA0cl(1/5) AAS
いちいち引数を書くとは面倒になったと言う人もいるだろうが、
おかげでデフォルト引数を簡単に実現できる。
<?php
function foo2($a ="俺様") {
print "$a は凄い<br>";
}
foo2("お前");
foo2();
?>
/*
省4
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) {
省11
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ゲット";
#(何も表示されない)
省4
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) {
省14
36(1): 03/02/28 11:32 ID:??? AAS
>>28
変数名の後ろは全角文字でもダメみたいですね。
(半角の「.」はOKだった)
#PHP code
$a=26;
print $a."ゲット";
#26ゲット
#PHP code
$a=26;
print "$a.ゲット";
省1
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) {
省15
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;
省3
51(1): 俺様 03/03/01 17:34 ID:UE12tRyA(4/12) AAS
#PHPscript
<?php
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
?>
省3
52: 俺様 03/03/01 17:41 ID:UE12tRyA(5/12) AAS
同様の例です。
#Perl
sub hoge{
print $a;
}
$a="俺様";
&hoge;
----------
#PHP
function hoge(){
省6
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++;
}
省14
61: 03/03/01 19:56 ID:??? AAS
#PHPscript
<?php
$a = 999;
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
省3
62: 俺様 03/03/01 19:58 ID:gsC9ephA(1/2) AAS
>>60
(*゚▽゚ノノ゙☆パチパチ
Perlにおいていわゆるmyを付けた場合が
PHPでは標準になっています。
C言語などの場合はコンパイル時に
未定義(未宣言)の変数だ!ってエラーを出してくれるのですが、
PHPではそのまま初期値(文字なら空白、数字なら0)として
認識してしまうので注意しましょう。
結構すんなり受け入れられるのかなー?
普段からmyを使ったりしている人なら問題ないだろうけど
省3
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を参照しますよと宣言している。
省11
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();
}
省7
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;
省7
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);
省1
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つが同じ意味となるのだ。
角括弧内の数字を省略した場合、
値は配列に最後の要素として勝手に追加してくれる。
省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]}";
省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];
こういうのはどう書く?
上下前次1-新書関写板覧索設栞歴
あと 512 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.025s