1 :
俺様 :
03/02/27 15:17 ID:tJsRCtRD 見事Perl→PHPへの脱皮に成功した俺様が 両者の違いを中心に講義してやる。 今までPerlマンセーだったやつはこれを機にPHPに変更しよう也。 質問もガンガン書いてくれ。 このPerlの文はPHPだとどう書くの?とか。
3 :
俺様 :03/02/27 15:19 ID:tJsRCtRD
まず、両者には似てる部分も非常に多いというのは特徴だ。 例えば変数の宣言、初期化をしてみよう。 $foo = 0; 頭に$をつけるところも、型を特に指定する必要がないことも、 文末は;になることもみんな一緒だ。 ほら、簡単に移行できそうに思えてきただろ?
4 :
俺様 :03/02/27 15:31 ID:tJsRCtRD
とりあえずHello, world!を出力してみるぞ。 <? print "Hello, world!\n"; ?> printの意味はperlと一緒だ。 まあ、printよりecho使う人が多いがそんなに違いはない。 perlユーザならわかりやすい方が(・∀・)イイ!だろう。 プログラムの開始と終了は<?と?>で囲むんだ。 これはPHP特有だから早く覚えよう。 <?じゃなくて<?phpで囲んでもOK。将来XMLとの連携を考えるなら 後者で書く癖をつけたほうが良いとは言われている。
5 :
nobodyさん :03/02/27 15:37 ID:8ZVFA0UH
PHPでrequireするファイルは必ず<?php ?>で囲まなきゃダメ?
7 :
俺様 :03/02/27 15:50 ID:tJsRCtRD
とりあえず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はインストールしてあると思うのでそれを前提とすると、
http://www.php.net/downloads.php 上記サイトにある
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
>>6 どういう用途で用いるのか知らんが
PHPスクリプトをrequire()するなら当然
そっちも<? ?>は必要だぞ。
まあ、聞くより自分で確かめたほうが早いだろう。
9 :
俺様 :03/02/27 15:59 ID:tJsRCtRD
俺様、がんがれよ。
11 :
nobodyさん :03/02/27 17:01 ID:+18aFIzU
12 :
俺様 :03/02/27 17:15 ID:tJsRCtRD
>>11 そこのじゃ嫌なのか?
そこからで全然問題ないと思うが。
おお,このスレはありがたい.がんがってください.
14 :
nobodyさん :03/02/27 18:00 ID:oT8eTv8K
期待age
15 :
俺様 :03/02/27 20:27 ID:tJsRCtRD
質問なんですけど、 関数の引数にハッシュを使う方法ってありますか? 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
(PerlCode) $name="john"; $say=sub{return "My name is $_[0].";}; print &{$say}($name); はPHPで書くとどうなりますか?
>>18 <?php
$name = "jhon";
function say($name) {return("My name is $name");}
echo say($name);
?>
21 :
nobodyさん :03/02/28 09:16 ID:TC5rJBdj
そんなもんをXHTMLに埋め込んだら、見苦しくて死ぬぞ。 ブラウザでパースもできんようになるし。 MVCにしろや。
22 :
俺様 :03/02/28 10:31 ID:???
>>20 お答えサンクス。
と、いうわけでもうインストールはばっちしだと思うので
今日はユーザー定義関数についてから話そう。
超独自仕様のPerとの大きな違いの1つだ。
まあ、はっきり言っちゃえば
>>18 みたいな書き方はPerlではごく普通だが
Perl知らない人から見れば何なのかさっぱりってほど特殊だ。
それに比べてPHPの
>>20 は他の言語
(例えばJavaとか)しか知らない人が見ても何となく理解できるだろう。
23 :
18 :03/02/28 10:35 ID:???
24 :
俺様 :03/02/28 10:51 ID:???
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
いちいち引数を書くとは面倒になったと言う人もいるだろうが、 おかげでデフォルト引数を簡単に実現できる。 <?php function foo2($a ="俺様") { print "$a は凄い<br>"; } foo2("お前"); foo2(); ?> /* お前 は凄い 俺様 は凄い */ 引数を指定しなかったら勝手に俺様が凄くなってくれるのだ。
講座スレ作ろうとする奴って大体理論が崩壊してるよな・・・。
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 :
俺様 :03/02/28 11:08 ID:0fBPA0cl
これかいてる間に重要なこと思い出した。 #Perl code $a=26; print "$aゲット"; #26ゲット ------------- #PHP code $a=26; print "$aゲット"; #(何も表示されない) ---------------------- 両者にはこのような違いが起きてしまう。 下はどうすればよいのか各自考えてみましょう。 出かけるので解答は夜で。
29 :
俺様 :03/02/28 11:09 ID:0fBPA0cl
26ゲットできなかったヽ(`Д´)ノ
30 :
俺様 :03/02/28 11:10 ID:0fBPA0cl
>>26 俺様はPHP歴浅いので
崩壊どころか理論自体形成されていない。
だからこのスレタイは入門だ。
間違いはがんがん指摘してクレイ!
31 :
nobodyさん :03/02/28 11:13 ID:njt3nQcM
>>30 俺はPHPすら分からない。
だから、がんがん解説してクレイ!
33 :
俺様 :03/02/28 11:21 ID:0fBPA0cl
>>32 それは便利だな。
では今後はそこに載ってないやつを指摘していくことにしよう。
>>18 <?php
$name = "jhon";
function say($name) {return("My name is $name");}
echo say($name);
?>
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] ";
>>28 変数名の後ろは全角文字でもダメみたいですね。
(半角の「.」はOKだった)
#PHP code
$a=26;
print $a."ゲット";
#26ゲット
#PHP code
$a=26;
print "$a.ゲット";
#26.ゲット
>>28 print "${a}ゲット";
print $a."ゲット";
echo $a,"ゲット";
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] ";
シフトJISでがんがん書いてます。
40 :
俺様 :03/02/28 20:06 ID:R6lXT7Vm
>>36 _n
( l _、_
\ \ ( <_,` )
ヽ___ ̄ ̄ ) グッジョブ!!
/ /
>>37 _、_
( ,_ノ` ) n
 ̄ \ ( E) グッジョブ!!
フ /ヽ ヽ_//
41 :
俺様 :03/02/28 20:12 ID:R6lXT7Vm
些細なことに見えるが、 自分はこのせいで某スクリプトを PerlからPHPに移植する際に、 30分ぐらい睨めっこした記憶があるので。 頭の中に入れて起きましょう。 $a=26; print "{$a}ゲット"; print $a."ゲット";
42 :
nobodyさん :03/03/01 11:16 ID:5K/2+grl
先生質問です。
>>9 の通りしましたがapacheが起動できません。
どうやらhttpd.confのLoadModule php4_module C:/php/sapi/php4apache.dllが原因のようです
php4apache.dllをphp4apache2.dllとしても同じでした。
WinME Apache2.0.39です
44 :
俺様 :03/03/01 12:12 ID:UE12tRyA
>>42 Apacheは2よりも1.3.27の方がいいと思う。
後はなんだろな〜
Meなんて怪しいOS使ったことないからな。
とりあえずApacheのバージョンを変えて試してみてクレイ。
45 :
nobodyさん :03/03/01 12:41 ID:5K/2+grl
>>44 ありがとうございます。1.3.27を使ったら起動できました。
| | ∧ |_|Д`) < それだー!! |文|⊂) | ̄|∧|  ̄ ̄ ̄ ̄ ̄ | | ∧ |_|Д`) < それだー!! |文|⊂) | ̄|∧|  ̄ ̄ ̄ ̄ ̄ | | ∧ |_|Д`) < それだー!! |文|⊂) | ̄|∧|  ̄ ̄ ̄ ̄ ̄ | | ∧ |_|Д`) < それだー!! |文|⊂) | ̄|∧|  ̄ ̄ ̄ ̄ ̄ | | ∧ |_|Д`) < それだー!! |文|⊂) | ̄|∧|  ̄ ̄ ̄ ̄ ̄
>>44 OS = Windowsとか思っている痛い講師がいるクソスレはココですか。
48 :
俺様 :03/03/01 17:05 ID:UE12tRyA
>>47 世の中は理詰めだけでは解決しない。
理論ヲタになるより、わかりやすさを求める方が現実的だ。
わかるかい?
しかも、PHPと直接は関係ない。
君は文学者がテイラー展開を出来なかったら馬鹿にするだろうか?
では、今日はいよいよ変数のスコープについての説明だ。
あくまでも対象者は基本的に『Perlしか』やったことがない人のみ。
C言語など他の言語をやっている人には馬鹿見たく思われる説明になるからだ。
>>48 >君は文学者がテイラー展開を出来なかったら馬鹿にするだろうか?
少なくとも数学者を目指す文学者がマクローリン展開を知らなければバカにするが。
50 :
俺様 :03/03/01 17:30 ID:UE12tRyA
>>49 俺様はべつにオペレーティングシステムのエキスパートを目指してはいないッポ。
#Perlscript
sub foo{
$a = 100;
print "$a,";
$a++;
}
&foo();
print $a;
#100,101
まあ、当たり前の結果が表示されます。
これをPHPに書き換えてみましょう。
51 :
俺様 :03/03/01 17:34 ID:UE12tRyA
#PHPscript <?php function foo(){ $a = 100; print "$a,"; $a++; } foo(); print $a; ?> # 100, 何故か100しか表示されません!?( ̄□ ̄;)ナント!! どうして後ろの$aは表示されなかったのでしょうかという問題です。
52 :
俺様 :03/03/01 17:41 ID:UE12tRyA
同様の例です。 #Perl sub hoge{ print $a; } $a="俺様"; &hoge; ---------- #PHP function hoge(){ print $a; } $a="俺様"; hoge(); Perlの方だと見事、俺様と表示されるのですが、 後者の方は何も表示されないので吃驚仰天です。
>>50 >俺様はべつにオペレーティングシステムのエキスパートを目指してはいないッポ。
いや、エンジニアでなくても車=ベンツとか思ってる奴はアホなわけで。
教養ではなく常識なのよ。常識。
>>54 どうしていつものコテハンを使わないんですか?
>>55 ごめんごめん。かんじよめないんだ?
ジャマ。キエロ
57 :
俺様 :03/03/01 19:04 ID:UE12tRyA
>>54 ,
>>56 (・∀・)カエレ!!
せっかくこのスレを良い感じにしたいのだから
煽りはよそでやってクレイ。
58 :
俺様 :03/03/01 19:06 ID:UE12tRyA
>>53 まあ、教養が無かった俺様が厨ってことで
その話題は終わりにしよう。スレ違いだし。
59 :
nobodyさん :03/03/01 19:09 ID:xu/mDseR
>>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;
と同じ
#始めたばかりなので全く同じかどうかとか用語の使い方は正しくないかもしれません
#PHPscript <?php $a = 999; function foo(){ $a = 100; print "$a,"; $a++; } foo(); print $a; ?> #100,999 なーる。
62 :
俺様 :03/03/01 19:58 ID:gsC9ephA
>>60 (*゚▽゚ノノ゙☆パチパチ
Perlにおいていわゆるmyを付けた場合が
PHPでは標準になっています。
C言語などの場合はコンパイル時に
未定義(未宣言)の変数だ!ってエラーを出してくれるのですが、
PHPではそのまま初期値(文字なら空白、数字なら0)として
認識してしまうので注意しましょう。
結構すんなり受け入れられるのかなー?
普段からmyを使ったりしている人なら問題ないだろうけど
プログラミング言語をPerlしかやってないでグローバルなのが当たり前だって
思ってた人には受け入れるのに時間が掛かるかもしれない。
そんなことないか?どうだろう。
63 :
nobodyさん :03/03/01 20:01 ID:Ddm3hU+C
Perlってなんて読むの?
64 :
俺様 :03/03/01 20:08 ID:gsC9ephA
逆に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
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 :
生徒B :03/03/01 20:39 ID:???
perlの use strict; のような未定義変数をチェックする方法はPHPに無いのでしょうか。
{ my $static = 0; sub foo () { return ++$static; } }
68 :
nobodyさん :03/03/01 21:03 ID:b+i+15ud
だめだ・・・functionの時点でわからそ。
69 :
俺様 :03/03/01 21:27 ID:UE12tRyA
>>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 )
71 :
俺様 :03/03/01 21:32 ID:UE12tRyA
>>67 なるほど。Perlでstaticを実現した例ですね。
まあ、PHPの場合はわざわざ自前で作らなくても
最初からstaticという命令が用意されているということです。
72 :
俺様 :03/03/01 21:35 ID:UE12tRyA
>>68 Perlをある程度理解していれば
わかるようにしたいのだが、
(Perlも未経験という場合はちょっと厳しいです。)
どこら辺がわからんだろうか?
とりあえずPerlのsubをfunctionに置き換えちゃえばOKだ。
74 :
生徒B :03/03/01 21:56 ID:???
>>66 error_reporting(E_ALL);
でどうかな。
78 :
生徒B :03/03/01 22:22 ID:???
<?php
error_reporting(E_ALL);
print $a;
?>
#<b>Notice</b>: Undefined variable: a in <b> (filename)
# </b> on line <b>3</b><br />
>>76 ありがとう。うまくいきました。
80 :
俺様 :03/03/01 22:30 ID:UE12tRyA
>>76 (・∀・)イイ!
φ(.. )メモシテオコウ
error_reporting(E_ALL);
あいだに空を入れる人生。色即是空(w
83 :
俺様 :03/03/02 19:03 ID:SRraTB8e
よっしゃ!早くも寂れてきたぞ。今日は配列について書いておこう。 まず、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
驚くことにPHPでは $a[] = "a"; $a[] = "b"; $a[] = "c"; $a[0] = "a"; $a[1] = "b"; $a[2] = "c"; この2つが同じ意味となるのだ。 角括弧内の数字を省略した場合、 値は配列に最後の要素として勝手に追加してくれる。 まあ、こういう独自仕様は混乱の元だから俺は上の形式で書いたことは無いがな。 わかった上で使うなら利用場面は結構多いかもしれない。
85 :
nobodyさん :03/03/02 19:12 ID:L99j8QKU
86 :
俺様 :03/03/02 19:19 ID:SRraTB8e
配列の関数一つ一つ説明するのは面倒だから
あとは
>>32 のサイトや公式のマニュアルでも読んでくれ。
Perlで実現できてたことの代替手段は大体存在してる。
87 :
俺様 :03/03/02 19:26 ID:FrxqKaYz
多次元配列は一つ注意を。 これは前も似たようなこと言ったが $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
まあ、おかしくなったらまずは変数を{}で括ってみろってことだ。
@a{qw(a b c)} = @b[1..3]; こういうのはどう書く?
91 :
俺様 :03/03/02 21:07 ID:FrxqKaYz
>>89 うーん、よくわからんな(汗
誰かわかる人募集中だ!
まあ、とりあえず根性で全部書いておけ。
$a = array(
"a" => $b[1],
"b" => $b[2],
"c" => $b[3],
)
なんで、空投稿するんだよ。見ずらいんだよ。
日本語すら満足に書けない俺様が講師のクソスレはここですか? 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。 見ずらいんだよ。
ねちっこいね。うざいというかきもい。
∧_∧ ( ´∀`)<きもい。きもい。 ( つ (_○___)
見づらいんだよ。でした。すまん。 俺は「俺様」じゃないです。
普通に見てる人もいるんで、煽ってるやつらマジでどっかいって。
>>97 普通にウザがってる人もいるんで自分のサイトでやるように説得してください。
99 :
俺様 :03/03/03 10:08 ID:gt/b6+qo
煽りでもレスが付かないよりは大歓迎だ!
>>98 需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。
100 :
俺様 :03/03/03 10:33 ID:gt/b6+qo
今日はオブジェクト指向について書いておこう。 PHPもPerlもJavaやC++に代表されるオブジェクト指向言語である。 Perlのオブジェクト指向についてあまり知らないんですが、 Javaに比べるとPHPのオブジェクト指向に関する仕様は ショボイ!!!! 今年中に出る予定のPHP5で大幅に機能がアップするらしいので それに期待しましょう。
101 :
俺様 :03/03/03 10:48 ID:gt/b6+qo
まず、誰でも最初に疑問に思うのが オブジェクト指向を用いるメリットは何か? ということだ。 再利用ができる? そんなのオブジェクト指向じゃなくてもしてるじゃないか。 我々はprintという出力命令を何度も利用している。 printの命令が内部でどういう仕組みになっているか調べたことのある人は極少数だろう。
102 :
俺様 :03/03/03 11:12 ID:gt/b6+qo
まあ、オブジェクト指向をうまく使えば 再利用『しやすく』はなるだろう。 まず、カプセル化(データ隠蔽)というものがある。 人間というオブジェクトの例で考えてみよう。 人間は体重というデータを持っているが 我々は外見から見ただけでは体重を正確には知れない。 例えば、彼に『体重計に乗れ』ってメッセージを送れば 正確な体重を得ることが出来る。 同様に体重に『直接』アクセスして値を変えることは出来ない。 彼に『〜を食べろ』ってメッセージを送れば その食べた分だけ体重が増加してくれるのである。 つまり、内部で保持しているデータを隠蔽できて、 見たり変えたりするには間接的にアクセスする必要があるということなのだが、 PHPではアクセサ(アクセス制限)の概念が存在しないため このカプセル化があっさり崩壊してしまう。
103 :
俺様 :03/03/03 11:35 ID:gt/b6+qo
再利用のためのもう一つの便利な機能は『継承』だろう。 既存のクラスのフィールド(データ)やメソッド(機能)を引き継いで、 その上で既存の機能を修正したり新たに追加したりできるようになる。 まあ、言い方を変えれば『継ぎはぎ』みたいなものだ。 PHPでは多重継承が存在しない。 つまり、あるクラスに対して1つの親クラスからしか フィールドやメソッドを引き継げないということだ。 同じく多重継承が禁じられているJavaではこのようなことがしたければ interfaceで代替が可能だが、 PHPではその代替案すら用意されていない。 多重継承なんかしなくてもプログラムは作れるという主張も根強いが、 まあ、それを言ったら継承なんかしなくてもプログラムを作れる と言っても同じようなことである。
104 :
俺様 :03/03/03 12:07 ID:gt/b6+qo
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
クラス内で自分自身のフィールドにアクセスするのにも $this->体重 このように$thisとかいうものが必要なのだ。 (Javaの場合は省略可能) これは長いコードを書こうとするとわかるが面倒すぎ。
106 :
俺様 :03/03/03 12:16 ID:gt/b6+qo
ここで
>>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
コンストラクタと言うのは結構便利なんだがな。
<?php
class 人
{
var $体重;
function 人($値){
if($値<0) print "( ´,_ゝ`)プ";
else $this->体重=$値;
}
}
$俺様=new 人(-20);
#( ´,_ゝ`)プ
?>
このように体重に負の値が入れられるのを
防ぐことが出来る。
まあ、
>>106 のようにされたら結局は意味が無いのだが・・・
108 :
俺様 :03/03/03 12:30 ID:gt/b6+qo
というわけで長くなったが PHPのオブジェクト指向は 現在の仕様では大したことがないということで 積極的に使う必要は無いだろう。 機能をグループ化したい人とか、 『何となくかっこいいことしたい人とか』 (ただし、使い方を誤ると逆にかっこ悪くなる) にはしても損は無い程度だろうか。 いずれにしてもPHP5に期待。
109 :
俺様 :03/03/03 12:33 ID:gt/b6+qo
否定的なことばかり書いてたが 最近の本とか見るとメリットしか書いてなくて オブジェクト指向マンセーになる奴が多すぎる気がするから 敢えて逆行して書いただけで、 メリットをもっと強調するのなら実際は そこまでひどいわけでもないがな。
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ブラウザ使ってこのスレごとあぼーんだ。
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ブラウザ使ってこのスレごとあぼーんだ。
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ブラウザ使ってこのスレごとあぼーんだ。
あんまり資源無駄に使ってるとアク禁食らっちゃうよー
このスレすごく良いです。頑張ってください。
115 :
nobodyさん :03/03/04 07:56 ID:6TNNfPas
116 :
俺様 :03/03/04 10:17 ID:SJwb4sM+
オブジェクト指向に関するレスは0か。
まあ、使わなければならない機能でもないから放って置いてくれ。
今日はそろそろ具体的なHTMLドキュメントの作成方法に入っていこう。
>>113 気をつけます。
>>114 (TдT) アリガトウ
>>115 俺様は朝5時になんか起きれん。
117 :
俺様 :03/03/04 10:29 ID:SJwb4sM+
出力方法は何通りかあるので示しておきます。 自分が使いやすい方法を用いればよいだろう。 <?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+
資源無駄使いって言われたので 混合させてまとめて記述しちゃうか。 <?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+
因みに、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
この利点を利用すれば 簡単なカウンタなら カウント保存用の空ファイルさえアップしておけば ほんの数行であっという間に出来てしまうのだ。 明日はファイル入出力をやろう。
122 :
nobodyさん :03/03/04 18:41 ID:Nso2bqOx
>122 ねずみ講じゃないの?
124 :
nobodyさん :03/03/04 18:55 ID:QqzA7g89
香ばしいです、はい。
OOの無いPHPを使う位なら俺はPerlを使う。
127 :
生徒B :03/03/05 01:20 ID:???
>>126 入門なんだから、大目に見てくださいな。
128 :
俺様 :03/03/05 10:25 ID:RSVIcXg3
>>126 まあ、まずはOOを使うメリットをよく考えないと。
モジュールでも作るのか?
>>127 OOの入門レベルなら
プログラミング全体で見てもやはり入門であることには違いない。
130 :
俺様 :03/03/05 10:50 ID:RSVIcXg3
では、ファイル操作について簡単な説明をしておこう。
ファイルの開き方は、PerlではopenだったがPHPではfopenになる。
読み取りや書き込みなどのモードもPerlとは仕様が変わり
C,Java寄りになっているので注意しよう。
PHP:
$fp = fopen(filename, mode); //ファイルポインタの位置が返る
Perl:
open(FILE, filename); //返り値は正常時が1、失敗だと0
オープンモードの選択方法がPerlだと+>みたいのをファイル名に直接つけていたのが
PHPだと2つ目の引数として別に記述するようになった。
ファイルハンドラは引数に記述するのではなく、
返り値になったのでそこも注意しよう。
具体的な仕様はマニュアルを参照。
http://www.php.net/manual/ja/function.fopen.php
132 :
俺様 :03/03/05 11:07 ID:RSVIcXg3
では超簡易カウンタを作ってみよう。 仕様としてはファイルcount.txtの1行目にカウンタ数値を書くだけのものだ。 まず予めcount.txtを作成して0を記述しておくこと。 <?php $fp = fopen("count.txt","r"); //count.txtを読み出しモードで開く。 //$fpはファイルポインタであり、rの場合ファイルの先頭の位置が返される。 $count = fgets($fp); //改行かファイルの終端まで読みこんで$countへ代入。 fclose($fp); //いったん閉じる $count++; $fp = fopen("count.txt","w"); //書き込みモード fwrite($fp,$count); //書き込み。 fclose($fp); ?> <html> <body> 貴方は<?php print $count; ?>人目の俺様の弟子じゃ。 </body> </html>
133 :
俺様 :03/03/05 11:16 ID:RSVIcXg3
134 :
俺様 :03/03/05 11:25 ID:RSVIcXg3
では明日はいよいよフォームの処理を行おう。
135 :
俺様 :03/03/05 11:27 ID:RSVIcXg3
136 :
俺様 :03/03/05 11:56 ID:5JBlRiko
因みに、PHPはHTML内に埋め込むことができると言うのを 利点として主張されることも多い。これは以下のように書けるからである。 <?php $title = "タイトル"; ?> <html> <head> <title><?php $title ?></title> </head> <body> 俺様のHTMLドキュメント </body> </html> このように必要な部分だけをPHPスクリプトとして認識させることが出来る。 コメントについても書いちゃおう。 Perlでは#のみだったがPHPではJavaなどで使われている以下の形式も可能である。 // コメント。#と意味は同じ。 /* これもコメント。複数行をコメントか出来るのが特徴。 つまりここもコメントになる。 */
137 :
nobodyさん :03/03/05 13:34 ID:E53JqQ+I
PHPには「〜?〜:〜」に該当する関数等はありまつか? 下のようなのが沢山あるのでなるべくif文は使いたくないんです。 例1:(Perl) printf "<a href=\"%s\" target=\"%s\">%s</a>\n",&link($a?$b:$c),$d?"_blank":"_top",$d?"新しいウィンドウで開く":($e?"次のページ":"更新");
条件演算子としては、他に "?:" (または trinary) 演算子があります。 この演算子の動作は、Cまたは他の多く言語と同じです。 (式1) ? (式2) : (式3); この式は、式1 がTRUEの場合に 式2 を、 式1 がFALSEの場合に 式3 を値とします。 と、PHPマニュアルからまんま転載してみる。
139 :
137 :03/03/05 13:44 ID:???
>>139 ありがとう。
PHPに乗り換えようかと思います。
140 :
俺様 :03/03/05 14:02 ID:5JBlRiko
PHPによるHTTP認証のフックは、Apacheモジュールとして実行した時のみ 有効で、 CGI版では利用できません。Apache モジュールPHPスクリプトにお いて、header() 関数を使用して "Authentication Required" メッセージをクライアントブラウザに送る ことが可能です。 これにより、クライアントブラウザにユーザー名とパスワードを入力する ウイ ンドウがポップアップ表示されます。一度、ユーザーがユーザー名と パスワードを 入力すると、PHP スクリプトを含むその URL は、次回以降、 定義済みの変数 PHP_AUTH_USER, PHP_AUTH_PW, and PHP_AUTH_TYPEにそれぞれユーザー名 、 パスワード、認証型を入力してコールされます。 定義済みの変数は、配列 $_SE RVER および $HTTP_SERVER_VARS でアクセス可能です。 "Basic" 認証のみ がサポートさ れています。詳細は、 header()を参照下さい。
141 :
俺様 :03/03/05 19:13 ID:RSVIcXg3
>>140 俺様の騙りがついに
キタ━(゚∀゚)━( ゚∀)━( ゚)━( )━(゚ )━(∀゚ )━(゚∀゚)━!!!!
142 :
nobodyさん :03/03/05 19:16 ID:juhSxd8a
つづきまだー?
$a : $b ? $c = 1; PHPはこれ書ける?
146 :
俺様 :03/03/05 23:06 ID:MFbIbSdy
>>143 まあ、1日にいくつも書くの疲れるから。
あせらず明日まで待ってクレイ。
>>144 実際に使うなら、ファイルロックしないと( ゚д゚;)マズーだろうな。
シンプルカウンタは
>>135 のを使ったほうが良い。
>>145 ?と:が逆じゃん?
>>138
147 :
nobodyさん :03/03/05 23:17 ID:5JBlRiko
>>145 三項演算子まともに使えない自作自演俺様晒しage
148 :
俺様 :03/03/05 23:47 ID:MFbIbSdy
ふふふ。ひっかかったか。 Perlは三項演算子を左辺値として使える。 って全然利用価値はないけど、知ってるか試しただけ。
あぁ。$a ? $b : $c だな。・・
152 :
nobodyさん :03/03/06 01:02 ID:uZwldhHh
154 :
俺様 :03/03/06 01:07 ID:ZBXb+hSM
155 :
俺様 :03/03/06 01:13 ID:ZBXb+hSM
>>150 とりあえず
$a ? $b : $c = 1;
って正しく書いてくれたら面白かったのに。
まあ、またそういうのがあったら引っ掛けてみてクレイ。
157 :
俺様 :03/03/06 01:34 ID:ZBXb+hSM
わからない点が出てきた(汗 $a ? $b : $c = 1; これは$aがまだ初期化されていないため falseとみなされて$cに1が代入される。 ところが、 $a=true; $a ? $b : $c = 1; このようにしても$bには1が代入されていなかった・・・ ちなみにPerlの場合はちゃんと$bに1が代入されてました。 というわけでどうしてPHPだと代入されないのかを考えて見ましょう。 PerlとPHPの違いですね。
俺様に、きもいストカー、スレ繁盛。 サラリーマン俳句
define("true",0);
さっき書いたもので十分。Perlは三項演算子(の2、3番目のやつ)が左辺値になれる。 なんと関数も左辺値にできる(ver 5.6辺り(?)以降から..) my %hash; sub hoge : lvalue { my $key = shift; return $hash{$key}; } hoge('test') = 1; print $hash{test};
>>157 あほか?
$a?$b:($c=1);と解釈するからだろ。つーかそれが健全。
ごめん。またもや失敗。 return を使ってはいけない。とのこと。 sub hoge : lvalue { my $key = shift; $hash{$key}; }
C(gcc 2.95.3-6 mingw)はperlと同じ挙動を示した。 こんな書き方があるとは、知らなかった。。
わからない点が出てきた(汗 $a ? $b : $c = 1; これは$aがまだ初期化されていないため falseとみなされて$cに1が代入される。 ところが、 $a=true; $a ? $b : $c = 1; このようにしても$bには1が代入されていなかった・・・ ちなみにPerlの場合はちゃんと$bに1が代入されてました。 というわけでどうしてPHPだと代入されないのかを考えて見ましょう。 PerlとPHPの違いですね。わからない点が出てきた(汗 $a ? $b : $c = 1; これは$aがまだ初期化されていないため falseとみなされて$cに1が代入される。 ところが、 $a=true; $a ? $b : $c = 1; このようにしても$bには1が代入されていなかった・・・ ちなみにPerlの場合はちゃんと$bに1が代入されてました。 というわけでどうしてPHPだと代入されないのかを考えて見ましょう。 PerlとPHPの違いですね。わからない点が出てきた(汗 $a ? $b : $c = 1; これは$aがまだ初期化されていないため
わからない点が出てきた(汗 $a ? $b : $c = 1; これは$aがまだ初期化されていないため falseとみなされて$cに1が代入される。 ところが、 $a=true; $a ? $b : $c = 1; このようにしても$bには1が代入されていなかった・・・ ちなみにPerlの場合はちゃんと$bに1が代入されてました。 というわけでどうしてPHPだと代入されないのかを考えて見ましょう。 PerlとPHPの違いですね。わからない点が出てきた(汗 $a ? $b : $c = 1; これは$aがまだ初期化されていないため falseとみなされて$cに1が代入される。 ところが、 $a=true; $a ? $b : $c = 1; このようにしても$bには1が代入されていなかった・・・ ちなみにPerlの場合はちゃんと$bに1が代入されてました。 というわけでどうしてPHPだと代入されないのかを考えて見ましょう。 PerlとPHPの違いですね。
粘着きもいお(○´∞`○)
167 :
俺様 :03/03/06 08:26 ID:0wTJZFjp
169 :
イ奄様 :03/03/06 09:07 ID:???
これで勘弁してくれ Perl $a?$b:$c=1; PHP $a?$b=1:$c=1;
170 :
俺様 :03/03/06 09:53 ID:0wTJZFjp
では今日はフォームの受け渡しを書いておこう。 まずはhtml部分から。 <form action="../cgi-bin/test.cgi" method="POST"> 名前: <input type="text" name="name" /><br> 性別: <br> <input type="radio" value="男" name="sex" checked>男<br> <input type="radio" value="女" name="sex">女<br> <input type="submit" name="送信"> </form>
171 :
俺様 :03/03/06 10:10 ID:0wTJZFjp
Perlだとこうなる。 #!/perl/bin/perl print "Content-type: text/html\n\n"; use CGI; $q = new CGI; print $q->param('name')."は".$q->param('sex'); まあ、cgi.pmがPerl5で標準に組み込まれるようになったので かなり楽になっただろう。 cgi.pmを用いないとさらに面倒である。
172 :
俺様 :03/03/06 10:17 ID:0wTJZFjp
PHPの場合だとこれでよい。 <?php print $_POST["name"]."は".$_POST["sex"]; ?> ちなみにGET方式の場合は同様に $_GETの配列に代入される。 $_REQUESTにはGET,POST関係なく 代入されてくれる。(ただし、安全じゃないという理由で推奨はされない)
173 :
俺様 :03/03/06 10:29 ID:0wTJZFjp
http://www.php.net/manual/ja/ref.strings.php 文字列関数を見るとわかるがかなり便利な関数が標準で用意されている。
htmlspecialchars
特殊文字をHTMLエンティティに変換する
例えば、<を'<'に変えてくれるのだ。
タグとみなされずにすむ。
trim
文字列の先頭および末尾にあるホワイトスペースを取り除く
これもフォーム処理の際にはあると便利だろう。
こんなふうにすればフォームから受け取った全ての値に
簡単に処理を適用できる。
$_POST = array_map("htmlspecialchars", $_POST);
$_POST = array_map("trim", $_POST);
174 :
俺様 :03/03/06 10:30 ID:0wTJZFjp
これでフォームもバッチリъ( ゚ー^)だろう。
a?b:c=1; 本来はエラーにすべきだけど、gccだと通るんだよな・・・三項演算子が左辺になりうる。 まあ-ansi -pedanticをつければエラーにしてくれるけど。
176 :
175 :03/03/06 11:28 ID:???
s/左辺/左辺値/
いい加減な仕様とか言って・・ 演算子の優先順位も、左辺値になるということも、 perlopにちゃんと書いてあるし。ちゃんとした仕様。 仕返しだ。 $a ? $b : $c = $d ? $e : $f = $g ? $h : $i = $j ? $k : $l = $m ? $n : $o;
178 :
俺様 :03/03/06 16:42 ID:SMJB497B
>>177 いや、いい加減な仕様ってのは今回に限ってはPHPに対していったのさ。
>>157 で言ったようにPerlの場合は予想したとおりになったからね。
俺が言いたかったのはPHPの場合が
>>161 みたいになっているのが
いい加減だなあってことだ。
PHPも、優先度は、=の方が上だから、そのままの結果。ではないのか?
180 :
俺様 :03/03/06 17:04 ID:SMJB497B
>>179 >優先度は、=の方が上
ソースキボンヌ。
俺が調べた結果だと=の方が下だった。
181 :
nobodyさん :03/03/06 17:05 ID:G2YpYyeT
本来はd=a?b:c;という形で使う者なんだから、=の方が低くて当然。 左辺値になるってのがおかしいんだよ(-_-;)
>>180 あぁ。最低から並べたものって書いてあった。うぅ。
180 名前:俺様 投稿日:2003/03/06(木) 17:04 ID:SMJB497B
>>179 >優先度は、=の方が上
ソースキボンヌ。
俺が調べた結果だと=の方が下だった。
181 名前:nobodyさん 投稿日:2003/03/06(木) 17:05 ID:G2YpYyeT
◆ようこそ!!ピンクエンジェルです★
http://www.pink-angel.jp/betu/index.html 182 名前:nobodyさん 投稿日:2003/03/06(木) 17:06 ID:???
本来はd=a?b:c;という形で使う者なんだから、=の方が低くて当然。
左辺値になるってのがおかしいんだよ(-_-;)
183 名前:nobodyさん 投稿日:2003/03/06(木) 19:06 ID:???
>>180 あぁ。最低から並べたものって書いてあった。うぅ。
182 名前:nobodyさん 投稿日:2003/03/06(木) 17:06 ID:???
本来はd=a?b:c;という形で使う者なんだから、=の方が低くて当然。
左辺値になるってのがおかしいんだよ(-_-;)
183 名前:nobodyさん 投稿日:2003/03/06(木) 19:06 ID:???
>>180 あぁ。最低から並べたものって書いてあった。うぅ。
185 :
nobodyさん :03/03/06 23:54 ID:aj5F0raF
教えて下さい。 配列@arrayに、'12-34','34-56'...みたいなデータが入ってて、-の右側でソートしたい場合、 @tmp = map { (split /-/)[1] } @array; @array = @array[ sort { $tmp[$b] <=> $tmp[$a] } 0 .. $#tmp ]; でやってたんですが、同じことをPHPでやるにはどうしたらいいんでしょう?
186 :
俺様 :03/03/07 00:46 ID:86BQl/fj
>>185 実はそれに似たようなので、俺様も苦労したんだな〜
1<>32<>43<>2
3<>41<>443<>232
...
ってな感じでデータが入ってて
3列目(上だと43,443)だけでsortしたいなーって。
で、結局よくわからんかったから自己関数作った。
function cmp ($a, $b) {
$tmp1 = explode("<>", $a);
//文字列$a(="1<>32<>43<>2")を<>で区切って配列に代入
//例えば、$tmp1[0]=1,$tmp1[1]=32
$tmp2 = explode("<>", $b);
if($tmp1[2] == $tmp2[2]) return 0;
elseif($tmp1[2] > $tmp2[2]) return -1;
else return 1;
}
usort ($array "cmp");
//ユーザー定義の比較関数により値で配列をソート
まあ、usortの使い方とかはマニュアルで調べてクレイ。
http://www.php.net/manual/ja/ref.array.php 俺様のと若干違うようなので、もっと簡単な方法があるかも知れんが
参考までに。
教えて下さい。 配列@arrayに、'12-34','34-56'...みたいなデータが入ってて、-の右側でソートしたい場合、 @tmp = map { (split /-/)[1] } @array; @array = @array[ sort { $tmp[$b] <=> $tmp[$a] } 0 .. $#tmp ]; でやってたんですが、同じことをPHPでやるにはどうしたらいいんでしょう?教えて下さい。 配列@arrayに、'12-34','34-56'...みたいなデータが入ってて、-の右側でソートしたい場合、 @tmp = map { (split /-/)[1] } @array; @array = @array[ sort { $tmp[$b] <=> $tmp[$a] } 0 .. $#tmp ]; でやってたんですが、同じことをPHPでやるにはどうしたらいいんでしょう?教えて下さい。 配列@arrayに、'12-34','34-56'...みたいなデータが入ってて、-の右側でソートしたい場合、 @tmp = map { (split /-/)[1] } @array; @array = @array[ sort { $tmp[$b] <=> $tmp[$a] } 0 .. $#tmp ]; でやってたんですが、同じことをPHPでやるにはどうしたらいいんでしょう?教えて下さい。 配列@arrayに、'12-34','34-56'...みたいなデータが入ってて、-の右側でソートしたい場合、 @tmp = map { (split /-/)[1] } @array; @array = @array[ sort { $tmp[$b] <=> $tmp[$a] } 0 .. $#tmp ]; でやってたんですが、同じことをPHPでやるにはどうしたらいいんでしょう?
配列にしてからソートした方がよくない?
>>185 Perlならこれでいいんじゃない?
@array = sort { (split(/-/,$a))[1] <=> (split(/-/,$b))[1] } @array
>>185 $i = 0;
for($array[$i]) {
list($first, $second) = explode("-",$array[$i]);
$first[] = $first;
$secondt[] = $second;
$i++;
}
array_multisort($second, $first);
$i++;
while ($first[$i]){
$array[$i] = $first[$i] . "-" . $second[$i];
$i++;
}
PHP初心者スレで書いた奴を改善してみた。
>189 ソートの度になにかの処理をするって遅くならん?
現在時刻から$n日後を求めたいいいだけどprelだと以下 ($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime(time + $n*24*3600); PHPだとどうなるんだ? あのツェラーの公式だっけか?
>>192 >$n日後
なら純粋にtime()に86400 * nを足せばいいのでは?
$i = 90; $year = date("Y", time()); $day = date("n", time()); $month = date("j", time()); $hour = date("G", time()); $minute = date("i", time()); $second = date("s", time()); $timestamp = mktime($hour, $minute, $second, $month, $day + $i, $year); print date("Y/n/j G:i:s", $timestamp); まぁ別に変数を使う必要も無いわけだが。
195 :
$n日後 :03/03/08 13:58 ID:NNyx9+/Y
>>193 >>194 レスサンク!
ツェラーの公式とはまた違うか、・・・・。
PHPではツェラーの公式なんか使わなくても簡単に指定した日の
曜日とかも算出出来ちゃうんだね。
--抜粋--
また、カレンダー等でその日の曜日を知りたい時、「perl」では
Zeller(ツェラー)の公式を使って算出しなければいけませんが、
「php」では「string date (w , [timestamp])」とすると、
「timestamp」で指定した日にちの曜日を数字で返してくれます
(0(日曜)〜6(土曜))。極端な例を2点ほどあげましたが、
他にも便利な関数が数々あります。
--抜粋--
ttp://bin5.info/useful/php/php_02.html
>>196 いやいや、これはこれであれはあれで・・・
失礼すました。
Perlの場合、自前で計算したくないなら、Date::Calcを使えばいい。
>>194 の回答はアホ過ぎ。timeの戻り値がシリアル値なんだから、
その性質を使わないのは勿体無い。
>>199 うるう秒の意味わかってるか?
で、それをどうしたいのか?
うるう秒が蓄積されて誤差が1日を超えるような時間は、32bitのtimeでは指定できない。
でいいかな?
うるう秒をちゃんと考えるなら、
>>194 の方法で・・。
list($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time() + $n*24*3600);
>>198 「アホでも判るように。」が信条なんだが。
で、後学の為にその性質を使ったコードを見せて頂きたい。
reloadなしで書くとこうなるわけですね。
>>202 サンクス
吊ってきま。
つづきまだー
206 :
&rlo;ega待期&lro; :03/03/10 17:03 ID:EpMeREtC
208 :
俺様 :03/03/10 17:47 ID:SvAZl1u/
そろそろネタ切れだ。 以上の知識でもうどんな物でも Perl→PHPの移行はできるはずだ。 練習として誰かYomiサーチを移植してみよう。
俺様、ちょっち待てよ。 Yomiサーチの移植の続きやれよ。(w
>>210 出来るわけ無いだろう。このスレ読む限りでは。
dbを触るところまでやってほしかったっす。
213 :
俺様 :03/03/10 22:09 ID:SvAZl1u/
よっしゃ。じゃあMySQLまでやろう。 というか俺が今その勉強中だから まあ(・∀・)つ目 オチャデモノンデマテ!
215 :
俺様 :03/03/10 22:26 ID:KPB0lsuM
216 :
nobodyさん :03/03/10 22:32 ID:Hr2fHuuO
217 :
nobodyさん :03/03/10 23:02 ID:c9OmtJD2
PHPはいいからDelphiおしえれ
>>219 もうちょい具体的に。激しく違う。としか言いようがない。
221 :
俺様 :03/03/10 23:17 ID:KPB0lsuM
Delphiは板違いなのでプログラム板で。
>>221 釣りですか?
真性ならプログラム技術板のPerlスレでも似たようなことを言っちゃうんだろうな。
このスレでは、いずれ php.ini の解説もしてくれますか? 俺が Perl → PHP で一番悩んでるのが php.ini (により定まる動作環境?) なんだよね。 こっちのサーバでは動くのにあっちのサーバでは動かない、とかとか。
>>224 それって各鯖の鯖管に問い合わせるべきじゃないのか?
知っててもそれじゃ手が出せないだろ。
>>225 php.iniの設定ってある程度はコード中で変えられたと記憶。
>>225 問題解決のためならその通りですが、
予備知識が無いと、聞きようが無い and 読みようが無いと思ったのさ。
詳しくは本でも買って読め、ということになるのかもしれないけど、
Perlユーザ向けの *入門編レベル* で十分なので、
抑えておくべきポイントを教えてくれると嬉すぃ。
>>227 phpinfo呼び出す。
後は値でどういう設定かは見当が付く。
もちろん、一番最初に <?php phpinfo(); ?> だけ書いたファイルを置く、これはやってます。 ただ、 > 後は値でどういう設定かは見当が付く。 これがね…。 要点だけで良いので、時間余ったらよろしく。>>俺様
230 :
俺様 :03/03/11 11:10 ID:+7fowk1S
まあ、入門レベルならそこまで弄る所はないだろうというのが本音だが。 >こっちのサーバでは動くのにあっちのサーバでは動かない これで困っているなら、なぜ動かないのかを検討する方が先だろうし。 まあ、php.ini自体に英語で最初から説明が書いてあるので それを見ながら幾つか拾ってみよう。
231 :
俺様 :03/03/11 11:17 ID:+7fowk1S
>>231 お前、全部説明する気か?大変すぎだぞ。それ。
233 :
俺様 :03/03/11 11:23 ID:+7fowk1S
234 :
俺様 :03/03/11 11:28 ID:+7fowk1S
>>232 まあ、重要な部分だけあといくつか。
あとはその日本語訳をよんでクレイってことで。
これも確かめたほうがいいな。
register_globals = Off
Onにすると変数がグローバル変数となってしまう(だったっけ?)
俺はOnにしたことないからよく知らんが。
4.1.0以降でデフォルトがOnからOffに変わったので注意すべき。
Onのサイトのみで動いていたものをOffのサイトで動かすには
結構スクリプトの書き換えが必要。
>>234 違うぞ。
フォームからの情報がそのまま変数として展開されるか、$_GET $_POSTなどの連想配列?の要素として格納されるかの違いだ。
236 :
俺様 :03/03/11 11:37 ID:+7fowk1S
; UNIX: "/パス1:/パス2" ;include_path = ".:/php/includes" ; ; Windows: "\パス1;\パス2" ;include_path = ".;c:\php\includes" 必要なら先頭の『;』は外しておこう。 例えば、DBで便利なPearを使うなら include_path = ".;c:\php\includes;c:\php\pear;" ってな感じにディレクトリを加えたほうが良い。 PearはPHPインストール時にデフォルトで付いてくるのだが サーバー上でincludeできる設定になっていない場合、 自分で使いたかったらPear自体を自分のディレクトリに アップロードしないとならないかも。
237 :
俺様 :03/03/11 11:47 ID:+7fowk1S
>>235 フォローサンクス。
あと、
; cgi.force_redirect = 1
はこのように変えたほうがいい。
cgi.force_redirect = 0
ただ、PHP4.3.0はこの挙動がおかしくなるバグがあるらしいので注意。
239 :
俺様 :03/03/11 11:51 ID:+7fowk1S
後はこれだ。 extension_dir = "" きちんとextensionsディレクトリをさすようにしておこう。 extension_dir = "C:/php/extensions"
>>239 じゃないとexpatとかmbstringが使えないからな。重要だ。
241 :
2 :03/03/11 11:56 ID:138sEgV0
何気に息が合ってそうなのが面白い。 がんがれ。
242 :
俺様 :03/03/11 12:03 ID:+7fowk1S
ああ、あとそのディレクトリをきちんと設定しても 一部のDLLは使えるようになっていない。 Windows使いなら ;Windows Extensions ;Note that MySQL and ODBC support is now built in, so no dll is needed for it. ; ;extension=php_bz2.dll ;extension=php_cpdf.dll ・・・ 使いたいdllの先頭の;を外す必要がある。 具体的に各鯖でどうなってるかはphpinfo()読めば大体わかるでしょう。
243 :
俺様 :03/03/11 12:05 ID:+7fowk1S
まあ、重要な設定はこんなもんか? 後は上の日本語訳や マニュアルにもけっこう説明がしてあるはずだから それを読んでクレイ。
register_globals対策。 php3 -> php4で一番困るのが register_globals で、Sourceを手っ取りばやく移植するにはSourceの先頭で $hoge = $_POST["hoge"]; ってな感じにする。
>>244 って言うか配列を変数に展開する関数みたいなの無かったっけ?
Perlだったっけか?
何だよここ、良スレ過ぎ!
回答ありがとう。
>>233 ググりかたが甘かったみたい。サンクスコ。
がんがってみます。
extract
248 :
俺様 :03/03/11 13:21 ID:Aj/riikG
レッツPHPより引用 >■修正の仕方 >以前のスクリプトを、PHP4.1.0以降に対応させるには、 >以下の文を、最初の<?以降に挿入すると、暫定的に動作するかと思われます。 >extract($_GET); >extract($_POST); >extract($_COOKIE); >extract($_SERVER); >extract($_SESSION);←セッションを使う場合 >未確認なので動作は保証しません。extractは配列を変数に展開するための関数です($_GET[f]=2002なら$fに2002が入る)
phpをcgiとして使用した場合は ・Perl/CGIと比較して処理速度の高速化 ・サーバー負荷の低減 これらのメリットは無くなるということですか?
>>249 そだね。CGIとしてPerlやCを動かすのと状況は同じ。
それでも俺的にはメリットは余りあるけど。
後、マルチすんなボケ。
251 :
俺様 :03/03/13 11:51 ID:???
今日はいよいよDBについて書こう。ようやく使い方がわかってきたので。 PostgreでもMyでも使えるようにPearを用います。 対応DB Interbase Mini-SQL Microsoft SQL Server MySQL Oracle 8 (OCI) ODBC PostgreSQL Sybase
252 :
俺様 :03/03/13 11:59 ID:???
まず準備としてphp.iniの設定が必要だ。
この3つを参照。
>>236 >>239 >>242 >>239 、
>>242 はMySQLのみの場合は要らないかな。
例えばPostgreSQLを使いたければ
;extension=php_pgsql.dll
を
extension=php_pgsql.dll
ってする必要がある。
253 :
俺様 :03/03/13 12:09 ID:???
MySQLのみインストール方法も書いておこう。
http://www.mysql.com/downloads/ ここからバージョンを選んで(勇気ない俺は4ではなく3.23)
Windows downloadsってのを落とす。
で、seteupを実行してnext連打でOK(一応要確認)。
インストールしたらc\:windows辺りにmy.iniってファイルが出来ていると思うので
それを開いてこれを追加。
[mysqld]
default-character-set=sjis
以上で完了だ。
PostgreSQLはcygwinを入れたりアカウント作ったりと面倒なので各自で調べてくれ。
何とかインストールできたけど数時間掛かった(汗
254 :
俺様 :03/03/13 12:11 ID:???
ああ、後winmysqladmin.exeってのも 一度実行してユーザー名とパスを決めるように。 外部に公開しない場合はキャンセルでも良いでしょう。
255 :
俺様 :03/03/13 12:17 ID:???
PHPにはいる前に単独での動作確認もしておきましょう。 DOSプロンプトで C:\>mysql\bin\mysql で、 Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 50 to server version: 3.23.55-nt Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> こんなふうになったら成功だ。
256 :
俺様 :03/03/13 12:24 ID:???
257 :
俺様 :03/03/13 12:25 ID:???
もちろん4.2以前から使ってた人は 最初からPearも使用できます。
258 :
俺様 :03/03/13 12:30 ID:???
259 :
山崎渉 :03/03/13 17:01 ID:???
(^^)
age
MySQL入れました。 最初、エラーが出て焦りました。 mysqladminいいかも。
つづきまだー
263 :
俺様 :03/03/19 23:51 ID:???
>>262 何の話題がいい?
語るべきことは大体語っちゃったから
もう全てのPerlスクリプトを移植できるはずだ。
実践編が欲しいな。 なんかのコピペジェネレータを作るとか。 てかフォームを表示して受け取ってとかやってるとすんげー HTMLとPHPのコードが入り乱れて汚くなっちゃうんだけど、どうすりゃいいの?
上でデータを作って下で表示させりゃいい。 <? //極手抜き $hoge = $_POST["hoge"]; ?> <HTML> <H1><? print $hoge; ?></H1> </HTML> とか。
俺様殿江。ファイルとディレクトリの扱い方について解説して下さい。
Perl の Taint モードみたいのって、PHP にありますか?
Perlのexitや__END__みたいなヤシはありますか?
$fh = @fopen($file,"w"); の@はperlの何に相当するんですか?単にfopenじゃイクナイの?
>>269 @をつけると、エラー出力を抑止する。
つけなくてもいいけど、その場合はfopenに失敗したときにエラーがブラウザに返される。
>>270 ありがd。
それじゃ代わりにperlみたいに
$fh = fopen($file,"w") or die("しぼんぬ");
ってやってもイイのかな。
>>271 いやだからそーすると、しぼんぬの前にエラーメッセージが出てしまう。
$fh = @foepn($file, "w");
if(!$fh){
die("しぼんぬ");
}
>>268 exitはexit()
__END__や__DATA__はないんじゃないかな
276 :
nobodyさん :03/03/25 14:18 ID:CVcoKJbJ
メモ。 $a = $b || $c; perl では、$b が false の場合は $c が $a に代入される。 php の場合は、 $a には $b || $c の bool値(0 or 1)が入る。
>>276 それJavaScriptでもできたなぁ。
278 :
nobodyさん :03/03/26 06:38 ID:l1CVp/e0
ISPによっては、PEARとかの拡張モジュールが入ってない ところがあるだろうけど、自分で使えるように拡張できるの ですか? 例えばPerlでいえば、モジュールを自分のディレクトリに入れ ておけばいいけど、そーゆーことはPHPでできますか?
>>277 ホントだ。
$foo ||= 'bar'; とか…は流石に無理かな。
ちなみに、python でも or を使って同様のことが出来ました。
>>278 出来るよ。ただし、共有のサーバーにインストールする場合は、
いままで自分のHOMEのライブラリを読んでいたのが、
ISPがPEARをインストールして突然ライブラリのバージョンが変わったりとか
…ありそうな話なので気をつけて。
280 :
nobodyさん :03/03/27 05:59 ID:p+/0Vcby
>>279 できるのですか。
PHPは、PHP.INIにいろいろな基本設定を書いたりするようなので、
通常ISPでCGIやると、それを編集するのは許されないだろうから
無理だとおもっていました。
PHP.INI に記述された設定は、スクリプト内で変更できるのですか?
281 :
nobodyさん :03/03/27 08:34 ID:illH7cXT
> PHP.INI に記述された設定は、スクリプト内で変更できるのですか? ini_set -- 設定オプションの値を設定する string ini_set ( string varname, string newvalue) だけど、全ての設定が変更可能ではなく、pathの設定とかは確か無理だったかな。 include_pathの設定は、カレント・ディレクトリに <?php require_once '/full/path/of/PEAR.php'; ?> とか、リンクを PEAR.phpと言う名前で置くことで対応。
Perl の $ perl -wcT hoge.pl に相当する PHP の簡単な文法チェック方法って無い?
質問です。 例えば名前とトリップを分離する場合、Perl なら if ($FROM =~ /(.*)(\#\S+)/) { $name = $1; $trip = $2; } と、$1, $2 使って楽できるんだけど、 PHP で↑の $1, $2 みたいなモノに相当するのって何ですか?
>>283 PerlならsplitにLIMITを指定して使い、分割すると思うが・・・・
PHPでもsplitでしょ。
>>284 あー例が悪かったですね。丁度身近にあったので出しちゃいました。
要はマッチした部分を簡単に再利用できないか?という質問です。
つまり、Perl の $1, $2 に相当するモノって何だろう、ということです。
\\1,\\2
>>286 \\1, \\2 ってどう使うのでしょう?
マッチングの後に、print \\1; とかやったらエラーになりました…。
再度、google 様に問い合わせたら、
if (ereg("(.*)(\#[^ \t\n\r\f]+)", $FROM, $regs)) {
$name = $regs[1];
$trip = $regs[2];
}
でいいみたいですね。調査が甘くてすみません。
magic quotes gpc なるヤツでここしばらく悩んでた。 勝手にエスケープされるなんて、まるで想像もつかなかった。 Perl → PHP への道、俺にとってはかなり遠い。でもガンガルsage ところで tr/ab/cd/ って PHP ではどーやんの?
290 :
イ奄様 :03/03/27 16:23 ID:???
>>289 $hoge=strtr($hoge, "ab", "cd");
俺様ありがd C/C++とPerlとVBとPascalとASM位しか知らなかったのだが、 よーやくPHPに手が伸びそうでつ。
293 :
nobodyさん :03/03/28 06:56 ID:NA3CJ6rA
>>281 教えていただき、ありがとう。
システム側で設定したPHP動作設定値を変えられないとなると、
ISPで利用する場合、大きな壁になりそうですね。
例えばアップロードファイルのサイズは2Mまでだから、それを超え
るものをアップさせる仕様に対応できない。
PHPでWebアプリ組んでも、いつかはユーザ要件に対応できずに全部
Perl等に書き直す時が来るかも、ということでしょうか?
294 :
nobodyさん :03/03/28 08:06 ID:56FSUIhD
>>293 >>293 WEB用途にPHPを使うなら、.htaccessでphp.iniの設定を上書きする方法があります。
アップロードサイズの制限を変更するには、
upload_max_filesize と post_max_size の値を上げることで対応出来るかな。
PEAR のインストールは、多分 include_path に PEAR のpathを追加するだけでOKだと思う。
295 :
nobodyさん :03/03/28 18:00 ID:56FSUIhD
既出だけど、三項演算子のネストではまった事あったのでそのときの教訓。 Perl と PHP では、演算子の優先順位に結構違いがあるので 一度目を通しておこう。 $r = ($foo < $bar) ? "LESS" : ($foo > $bar) ? "GREATER" : "EQUAL";
296 :
nobodyさん :03/03/28 18:49 ID:56FSUIhD
>> 282 php -l script.php -w は、error_reporting(E_ALL); に相当?(かな?) Taint モードについては、私も前に探したことあるけどPHPには見つけられなかった。 汚染チェックは、自主的にそういう習慣を身につけるしかないのかな。
@sortdata = sort { (split(/\,/,$a))[2] <=> (split(/\,/,$b))[2] } @hogehoge; Perlでいう↑みたいなことはPHPではどうやればできますか?
299 :
nobodyさん :03/03/28 20:35 ID:/IEo7+Sn
∧_∧ _ _ .' , .. . ∧_∧
( ´_ゝ`) _ .- ― .= ̄  ̄`:, .∴ ' (
>>297 )
/ '' ̄ __――=', ・,‘ r⌒> _/ /
/ /\ / ̄\-―  ̄ ̄  ̄"'" . ’ | y'⌒ ⌒i
_| ̄ ̄ \ / ヽ \_ | / ノ |
\ ̄ ̄ ̄ ̄ ̄ ̄ \__) , ー' /´ヾ_ノ
||\ \ / , ノ
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ / / /
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| / / ,'
|| || || / /| |
!、_/ / 〉
|_/
300 :
nobodyさん :03/03/29 13:38 ID:CQcFf7wk
%hash = map { $_ => 1 } @list; とか、 @hash{@list} = (1) x @list; Perlでいう↑みたいなことはPHPではどうやればできますか?
302 :
phpformperl :03/03/29 20:26 ID:kc16+nkl
手本になるようなきれいなPHPコードどれかしってまっか? やっぱxoopsでっか?
>>302 XOOPSを積極的に弄っている身としては残念なことだが、
決してきれいなコードではないし、流れを追うのも面倒。
過去のしがらみとかあるので大きく変えられないことや、
複数人で作っているが、細かい部分で明確な規定がある訳ではないので
コア、標準モジュール、果ては標準外の勝手モジュールまで入れると
コードの統一はされていないと思っていい。
フレームワークとしては非常に緩いのでモジュールのコードまで
含めるのは本来フェアではないのだが。
あとJpGraphもコードはちょっとね。便利に使わしてもらってますけど。
304 :
phpfromperl :03/03/30 13:14 ID:fNA6Ajxw
>>303 サンクス
とりあえず手本にさせてもらいます。
いろいろ仕掛けをつけやすそうだし。
ほかよりましなようなので。
sub test { my $num = 0; return sub { $num += shift if @_ == 1; return $num; } } Perlでいう↑みたいなことはPHPではどうやればできますか?
>297,301,305 PHPでFP(関数プログラミング)でもやりたいのかな? lambda 代わりに create_function, array_(map|reduce|filter) 後、array_walk, usort。 で、大体御希望の事は出来ると思います。 ただし、…前にも書いたけど &&, || が倫理値を返したり、 …かといって三項演算子を使おうとすると今度は演算子の優先順位が違ったり、 他にも変数のスコープ等、細かな違いがいろいろ有るので、 PHPでのFPはあまりお勧めしない。素直にパラダイムシフトした方が良いと思う。 例えば >305 だと、 function test(){ $num=0; return create_function('$x','global $num;$num+=$x;return $num;'); } $num がグローバルに置かれるので、これでは要件を満たせていない。 カプセル化したいのなら、クラスを作る。 class Test{ var $num; function Test(){ $this->num = 0; } function add($n){ $this->num += $n; } function getNum(){ return $this->num; } }
307 :
nobodyさん :03/03/31 00:21 ID:D273gBu9
# 突っ込まれるかもしれないので、一応補足。
現行のバージョンのPHPでは、すべてpublicメンバになるので、
$numへ直接アクセスすることが可能。(Perlのオブジェクトでも同様だよね)
現状(PHP4)では、完全に隠蔽することは出来ない。…はず。(PHP暦浅いので自信なし。フォロー求)
#
http://www.php.net/ZEND_CHANGES.txt を読んだところ、
# zend2 engine/PHP5? では private が使えるらしい。
308 :
名無しさん@Emacs :03/03/31 17:22 ID:mhlggPCn
perldoc モジュール名、perldoc -f 関数名に該当する PHP のやり方って なんでしょうか?
php.netで検索する。
ブラウザのアドレス欄に php.net/関数名 pear.php.net/モジュール名
倫理値w
ぷりぃず、晒さないでw 訂正 s/イ/言/
313 :
nobodyさん <> :03/04/01 20:18 ID:iGZ3zwAc
>310 ローカルには作れんもんでしょうか? ADSL でも結果が出るまでの "待ち" が気になるの。
314 :
生徒1 :03/04/01 23:58 ID:2arYjAuZ
foreach (@pairs) { ($name,$value) = split(/=/); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value, "sjis", "", "z"); $value =~ s/&/&/g; $value =~ s/</</g; $value =~ s/>/>/g; $value =~ s/"/"/g; $value =~ s/\r\n/<br>/g; $value =~ s/\r/<br>/g; $value =~ s/\n/<br>/g; $in{$name} = $value; } こんなのはどうやってますか?
> 倫理値w 右か左を返すんだよ
PHPってx演算子ないの? print "-" x 10; みたいな
str_repeat()が近いよ。
perl にあって PHP にないもの。 PHP にあって perl にないもの。 …って何かないかな?
320 :
nobodyさん :03/04/11 00:44 ID:fBEofA1c
年寄りデザでつが,これから極めるのならPerlとPHPどっちでつか? ただPerlと違い,初心者向けの本がPHPにないところが痛いでつが。
でつ厨にはどちらも無理でつ
”極める”のなら、Perlの方が面白い。
323 :
nobodyさん :03/04/12 05:30 ID:sfZex8vW
>>320 私も年寄りですが、Perl、PHPを使ってメシ食ってます。
まったくの初心者が始めるならPHPですね。
HTTPプロトコルをあまり意識する必要がないから、
ブラウザに文字を表示させるのは簡単です。
そのコードも単純明快に理解できます。
一方Perlは、ブラウザに文字を表示させるためには
表示する処理の前に、何行かのおまじないを書かな
ければいけません。
そのおまじないを理解しようとすると、初心者では到底
理解できないので「難しい」ということになるかもしれません。
PHPの本は初心者用がたくさん売られていますよ。
大丈夫です。
Perlの方が幾分ややこしい気はするね。 Perl->PHPは入りやすいらしいけど逆は結構厳しい。 ちなみに、私は後者です…。
325 :
320 :03/04/12 22:12 ID:3Lo6Ghrc
>>323 Thanksです。
PHPだと入門書でいきなりECサイトまで行ってしまうのですが,
(チャット作成までなんとかついていっている程度)
Perlだと入門書で息切れするような。。。(とてもECサイトまでナンテ
行きませんよね?)
ただ,やはりデザなので自分一人でECサイトまではやりません。
外に頼むまでもない事を自分でやれるようにするという感じです。
(極めるという表現が不適切でした。)
データバのソートとか,Webの自動更新とか。
そのあたりでPerlとPHPはどうかな?と思ったわけです。
@array = ($query =~ /([0-9a-fA-F]{4})/g); これをPHPで表現するとどうなるんですか?
>>323 おまじないってなんだ?CGIとして使ったときのヘッダーのことか?
>>327 print "Content-type: text/html\n\n";
だと思われ
おまじないって言ったら1;が浮かぶ
331 :
nobodyさん :03/04/13 03:24 ID:Ba9KZRzY
PHPって配列厄介だなぁ。
>>331 PHPの配列の何が厄介なん??? ほれいってみ。教えてあげるよ。
>>331 僕PHPはじめて1週間だけど配列はだいたい分かったので
配列ですが僕はすぐ理解できたので
331さんの厄介とこが分かれば教えてあげますよ
>334 禿デゥ
338 :
nobodyさん :03/04/15 16:55 ID:JlWa+G1C
phpでperlでいうところのpackageの作り方教えてください。
331は、ハッシュと配列が一緒なのが気に入らないらしい。あと、 いちいちarray_*系の関数を使わないといけないのも面倒らしい。
340 :
nobodyさん :03/04/15 19:26 ID:1VLAH3RO
341 :
山崎渉 :03/04/17 12:01 ID:???
(^^)
342 :
山崎渉 :03/04/18 15:30 ID:???
(^^)
343 :
山崎渉 :03/04/20 06:02 ID:???
∧_∧ ( ^^ )< ぬるぽ(^^)
344 :
? :03/04/27 10:50 ID:7vWz7FBG
EUCの配列、文字列をSJISにするのはどういう風にやるの?
やっぱりpackageはC++でいう名前空間にあたるの?
346 :
nobodyさん :03/04/27 11:36 ID:aZMHQklX
348 :
bloom :03/04/27 12:29 ID:3nPIuagT
350 :
nobodyさん :03/04/28 22:57 ID:3GKx/vUL
イスラエルとか言われると萎える
351 :
nobodyさん :03/05/05 22:17 ID:LIOD5Ueh
mb_convert_encodingが使えないサーバの場合は?
jcode.php
353 :
nobodyさん :03/05/19 23:33 ID:cX3VPQ/6
教えてください。 perlで言うところのwarnなんですが、 print error_log($test); 見たいな形でerrorログに$testの値を出そうと思ったのですがうまくいきませんでした。。 どなたかperlでいうところのwarn関数のPHP版を教えてください。
>>353 よくわかんないけど trigger_error とか?
あぼーん
まぁ、胸張れるような場所でもないしな。
その発言しているサイトがある インターネット全体からどれだけの犯罪者を出しているんだろうね… 2chから情報を得ておきながら悪口言う人間もいることだし 放置しても平気でしょ
日本人だって 殺人とかの罪犯す奴いるじゃないか そしたら外国人は 日本人はみんな犯罪者だと思うのか?
359 :
山崎渉 :03/05/22 01:59 ID:???
━―━―━―━―━―━―━―━―━[JR山崎駅(^^)]━―━―━―━―━―━―━―━―━―
open( LOCK, ">./lock/count.lock" );# ロック用のファイルを作る(※1) flock( LOCK, 2 );# ファイルをロックする open( COUNT, "./log/count.log" );# カウンターの値が入ったファイルを開く $count = <COUNT>;# カウンター値を読み出す close( COUNT );# カウンターファイルを閉じる $count++;# カウンターを+1する open( CTEMP, ">./log/count2.log" );# 更新したカウンタの値を別のファイルに一時的に書き出す(※2) print CTEMP $count; $ezcount = "";#カウントファイルの数字を絵文字に変換 for ($i = length($count) - 1; $i >= 0; $i --) { $n = int(substr($count, $i, 1)); if ($n == 0) { $ezcount = "<img localsrc=\"325\">" . $ezcount; } else { $ezcount = "<img localsrc=\"".(179+$n)."\">".$ezcount; } } close( CTEMP );# 一時的に書き出したファイルを閉じる(書き込み完了) rename( "./log/count2.log", "./log/count.log" );# 一時的に書き出したファイルを本来のファイル名にリネーム unlink( "./lock/count.lock" ); flock( LOCK, 8 ); close( LOCK ); これをPHPにしたいのですが…だれかお願いします!
>>360 マルチおよび自分でやろうともしない。放置
362 :
nobodyさん :03/05/25 01:54 ID:YbAXJXvg
formから$_POST["name"]で値を受け取ったのですが、 値中の「"」と「'」がエスケープされてしまって、「\」がついています。 これは自分で取り除くしかないのでしょうか?
>>362 php.iniのmagic_なんちゃらを、off 詳細は誰かおながい
365 :
362 :03/05/25 02:32 ID:???
>>363 ローカルで出来なかったので、レンタル鯖にスクリプト設置して実験したら
やっぱり同じ現象がおこりました。・゚・(ノД`)・゚・。
自分で取り除いてみます…お騒がせしました
367 :
山崎渉 :03/05/28 17:06 ID:???
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
368 :
あ :03/05/30 22:54 ID:Ey+u4zPh
ヒアドキュメントを使うと print <<<EOF <タグ>$a<タグ2> EOF; の<タグ2>が表示されないのって、どうすりゃいいの???
369 :
イ奄様 :03/06/02 11:34 ID:EOTygtgq
>>368 print <<<EOF
<タグ>${a}<タグ2>
EOF;
370 :
あ :03/06/02 23:18 ID:9zPzvWqa
THANK!!!
371 :
nobodyさん :03/06/04 00:53 ID:1Jdo0O1g
jcode.phpでEUC半角カタカナをSJIS全角カタカナにしていのだが。
372 :
nobodyさん :03/06/04 01:12 ID:wjzhyKBb
373 :
age :03/06/08 17:42 ID:cXeOp+rQ
age
374 :
_ :03/06/08 17:44 ID:???
375 :
:03/06/08 18:09 ID:eRunpr9i
過去ログからのコピーです。
http://natto.2ch.net/mass/kako/974/974478132.html 489 名前: 文責:名無しさん 投稿日: 2001/04/11(水) 17:25
一般人なのに盗聴される、じゃなくて、「一般人だから盗聴される」んじゃないのかな?
基本的にネタ集めのためにやってんなら、有名人のネタを盗むと、有名人は告発できるし、
そんなことされても当たり前だと思われるので告発しても信じてもらえる。
そうでない人は、ここの途中の書き込みにもあったように「電波」扱いされるだけ。
ただで、ネタを仕入れるんなら、一般人に限るでしょう。
マスコミは自分らの無能さを恥じてほしいです。
ちなみに私が盗聴されはじめたのは、芸能人にストーカーされ始めてからでした。
そこからマスコミに広がって行った。
だから余計「妄想」とか思われそう。
友人に話したら完全に病気扱いされた。ストーカーって言葉がない時代だったしね。
書いておいておいた小説のネタが、他人の原作でドラマ化されたときにはきれまくっ
たなあ。(一度や二度のことじゃないけど)
376 :
age :03/06/13 23:55 ID:nW6iX8p9
a
377 :
nobodyさん :03/06/14 01:09 ID:Zt1p4X90
378 :
無料動画直リン :03/06/14 01:10 ID:K+P5CDjB
380 :
nobodyさん :03/06/19 03:00 ID:yyOItGJy
あ
HTMLとPHPコードを分離したいんだけど、 何か方法ありますか?perlでいうとこの HTML::Template みたいなのとか。
383 :
381 :03/06/20 01:29 ID:???
perlのdefinedみたいな奴 変数の定義がされているかどうかの チェックはどうやったらいいですか?
385 :
384 :03/07/05 12:49 ID:???
同名関数ありますた。スマソ
でも定数のみですた。 もうだめぽ ..
isset ですた。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
389 :
nobodyさん :03/07/23 10:22 ID:A887jOLI
PerlからPHPに入るとPHPで簡単にできることを Perlっぽく遠回りに書いてしまうことってないですか? 逆も然り そーゆー注意点とか教えて下さい。
Perl癖を取るためにもPHPに限らず 他の言語に興味を持つといいと思います。
もうそろそろPHPにも手を出してみるかと思ってたが、 このスレ見たらやる気なくした。やっぱC/C++にするわ。 まず第一に<?〜?>にコード書くなんて本当にキモいよ。 (JSPやASPも同じようなもんだがな) PHPってCGI/Perlの速度に我慢できなくなった奴が、C/C++はできないから しょうがなく使ってるんだろ? プロはJavaとかASP使うし、素人はPerlで十分(環境も整ってる)。 速度ががまんならないならC/C++、もしくはモジュール資産を活かして mod-perlだな。 PHPの選択はまずありえないね。
ASP使ってる時点でOutだと思うがね。 とりあえず海外見てきたら?
範囲演算子".."がないのが激しくムカツクんだが。
394 :
_ :03/07/25 13:14 ID:???
>>391 珍獣みっけ。
何のためのプログラムしてるのか知りたい。
↑趣味に効率は全く必要ないそうです
改行コードCRLFで保存したファイルを 配列で1行づつ配列で取り出して保存したいんですが、 何故かPHPだと改行コード(CRCR...LF)と増え続けます。 改行コードの仕様の問題なんっすかねぇ? # Perl open( IN , "hoge.dat" ); @lines = <IN>; close( IN ); #何か処理 open( OUT , ">hoge.dat" ); print OUT @lines; close( OUT ); // PHP $lines = file( "hoge.dat" ); // 何か処理 $fp = fopen( "hoge.dat" , "w" ); foreach( $lines as $line ){ fputs( $fp, $line ); } fclose( $fp );
>>400 バイナリモードで開く"wb"(WINのみ)
$fp = fopen( "hoge.dat" , "wb" );
とすると一応解決しますね。サンクスです。
根本的な解決になってるのかどうか微妙っす。
>>401 テキストモードで開くと
fputs などの出力処理中に \n が見つかった際に
内部で \r\n に置き換えるという小さな親切を行ってくれます
バイナリモードならそれをやらないので解決だと思われまする
403 :
402 :03/07/26 04:33 ID:???
うーん、でも読み込む際も CRLF⇒LF 変換やってくれたような? まあいいや。たぶん大丈夫。
>内部で \r\n に置き換えるという小さな親切を行ってくれます なるほそ。小さな親切ですね・・・
405 :
nobodyさん :03/07/28 20:34 ID:MPvwsvte
perlで、書き込み処理を終えたあとに他のページに飛ばすとき、 print "Location:./santa.cgi?$no\n\n"; exit; などとしていましたが、phpでこれと同等なのはどういうコマンドでしょうか? コマンド名だけでも良いので助言お願いします。
>>405 マニュアルのHTTP関連の関数を見るべし。
header("location: ./santa.php?no"); でどうでしょう。
locationは絶対パスで指定しなよ…
どっちでも同じでしょ。 相対だと不都合でるブラウザってあるの?
あるよ。 携帯とか。
どこの携帯?
412 :
_ :03/07/29 02:02 ID:???
○ index.html × ./index.html ってのが前あった。
∧_∧ ( ^^ )< ぬるぽ(^^)
∧_∧ ∧_∧ ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。 =〔~∪ ̄ ̄ ̄∪ ̄ ̄〕 = ◎――――――◎ 山崎渉&ぼるじょあ
418 :
nobodyさん :03/08/03 03:36 ID:e6CW3yAE
良スレ あげとく
419 :
nobodyさん :03/08/15 21:51 ID:/UWm9DVh
PHPユーザーのためのPerl入門だれか立ってってくれ!
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
421 :
nobodyさん :03/08/28 08:28 ID:aKTRoIJT
PHPでOOPでもと思い、 Perl use lib './lib/'; use Hoge; PHP define( 'LIB_DIR', './lib/' ); include( LIB_DIR . 'Hoge.class.php' ); とやってるんだけど、もうちっと短く書きたいなぁ。
422 :
nobodyさん :03/08/30 22:41 ID:AS3I0NRv
Perlやってた奴が、PHPを勉強するのにいい本って何? PerlでいうところのプログラミングPerlみたいな 大御所のこれさえ買っとけばたいてい載ってるって本きぼん。
423 :
nobodyさん :03/08/30 23:14 ID:AIvW/87l
424 :
nobodyさん :03/08/31 13:22 ID:AiCjBA+L
HTML::Template, DBI に替わるものがPHP覚える気になるんだけど。 プログラム中にHTML書いてあったら落ち着かない
426 :
nobodyさん :03/09/07 01:56 ID:1pDZ49hH
あ
427 :
nobodyさん :03/09/10 00:04 ID:EKqTJkq7
検索について教えて下さい。 perlで検索で、$find_lineの中に、$f_a_wordが含まれているかを if (index($find_line,$f_a_word) >= 0) { 含まれている } else { 含まれていない } このようにしていたのですが、phpだとどのようになりますか?
428 :
427 :03/09/10 00:42 ID:???
427です。eregというので出来そうです。 失礼しました。
>>425 これじゃだめかな?
やってみてくりくり
<?php
$find_line = "これはテソトです。";
$f_a_word = "テソト";
if(strstr($find_line,$f_a_word)){
echo '$find_lineの中に$f_a_wordは含まれています!';
}
else{
echo '$find_lineの中に$f_a_wordは含まれていません!';
}
?>
430 :
429です :03/09/10 01:20 ID:z4dT6uSf
番号ずれてますたスマソ。 427-428宛のレスです。 OpenJaneって番号ズレるのね。。。
431 :
:03/09/10 04:03 ID:???
strstr();ってi18n対応?
mb_strpos()とかじゃだめかい?
>>421 > PHPでOOPでもと思い、
インクルードパスの設定とOOPには何の関係もない。
‥‥‥というのはともかく、auto_prepend でググれ。
ここ、一昨日初めて来たんだけど良スレだね。 おかげで分からなかった事も分かりました。ありがd
435 :
nobodyさん :03/09/20 22:34 ID:VeIFc9WR
あるディレクトリの一覧をファイル名順でソートしたいと思います。 ただし、.や..や.htaccessといった、「.」で始まるファイルは対象外にしたいのです。 Perlで --- opendir(DIR, $path); @list = sort grep(!/^?./, readdir(DIR)); closedir(DIR); と書くところを、phpではどのように表現すればよいのでしょうか?
>>435 自信ないが
$dh = opendir($path);
while ($tmp = readdir($dh)) $filename[] = $tmp;
$filename = preg_grep("/^[^\.]/", $filename);
sort($filename);
closedir($dh);
natsort は?
439 :
nobodyさん :03/09/22 04:27 ID:PmE0lLf0
>>437-438 なるほど。このコード実行してないんであれですが、
preg_grep する前に $filename[] = $tmp しちゃうと、
配列$filename内には「.」や「..」が残りそうな雰囲気が…違ったらごめん。
こんな感じにしてみました。
---
if( false !== ($handle = opendir($query_path)) ){ //ディレクトリが開けるなら
while( $file = readdir($handle) ){
if( preg_match ("/^?./", $file) ){
$files[] = $file;
}
}
closedir($handle);
if( count($files) >= 1 ){
sort($files);
}else{
print "このディレクトリ内に読めるファイルはありません?n";
}
}
つーかnatsortって便利ですな。
http://search.net-newbie.com/php/function.natsort.html
440 :
:03/09/22 05:52 ID:???
>437のでOKでは。>439は正規表現が意味不明になってるよ。
正規表現が分からない時はこんなのもアリかな。
while ( $entry = readdir($dh ) {
if ( substr($entry, 0, 1) != '.' )
$files[] = $entry;
}
http://jp.php.net/substr
441 :
:03/09/22 06:08 ID:???
ああ全角か。スマソ。
全角でもオレには意味不明なんだが・・・
分からなかったら聞きましょうね♪
perlのflock関数だったらさんざん使ったことあるんですが、 perlの場合のflock関数と比較して、 phpのflock関数を使うときの注意点って、特になんか、ありますか? (ウェブサーバは、Apacheという前提です)
446 :
445 :03/09/28 00:48 ID:lxnHIT50
どなたかお答えくださいませ
lockはlock専用スレがありまっせ。
>>445 にたようなもんじゃないのかな?
たしか、PHPマニュアルにもflock関数は全ての環境で使えるもんじゃ
ないみたいなこと書いてあったし、
ネットワークファイルシステムに対応してないけりゃ、無理だろうし。
ちなみに、うぇぶさばは関係ないですぞ。
449 :
445 :03/09/28 03:46 ID:???
>>447 ども。のぞいてきます。
>>448 そうですね。
よく考えりゃ、どっちもOSのflockを呼び出してるってことだから、
特段変わることはないか。。。
>ちなみに、うぇぶさばは関係ないですぞ。
いや、マニュアル
http://www.php.net/manual/ja/function.flock.php に、
「いくつかのオーペレーティングシステムでflock() はプロセスレベルで実装されています。
ISAPIのようなマルチスレッド 型のサーバーAPIを使用している場合、
同じサーバーインスタンスの並 列スレッドで実行されている他のPHPスクリプトに対してファイルを保 護する際に
flock()を使用することはできません」
って書いてあったから、
ウェブサーバにIIS使ってると、事情が違うのかなと思って一応かいといたもんで。。。
(正直IIS分からんですが)
?
451 :
445 :03/09/28 22:34 ID:jyRnC+If
>>450 あれ、なんかとぼけたこと自分言ってました?
ご指摘きぼんぬ
通りがかりだが あまり気にする事は無いかと マルチスレッド型を利用している場合、別々に動作している phpは同一プロセス(の、別スレッド)で動作している事になるので プロセス単位で排他をかけるflock()は排他の目的には使えない ということで、HTTPdとphpの組み合わせによる、というのは正しいかも
保守新党
$str =~ s/◆/◇/g; みたいなマルチバイト文字列の置換をPHPでやるにはどうしたらいいんでしょうか。 mb_ereg_replaceはまだ実験段階らしいのであまり乗り気ではなく。
>>454 str_replaceでも「とりあえずは」OK。
それか、文字列をUTF-8に変換してから
$str_utf8 = preg_replace("/pattern/u", "replace", $str_utf8);
でもOK。
ただしmb_ereg_replaceはライブラリのライセンス絡みでもめてたけど
関数自体は十分実用に耐えるよ。
ライブラリの変更はPHP5で行われ、ユーザレベルでの変更は
不要になる方向らしいから気にすることは無いと思うけど。
ちなみにmb_ereg系を使うときはmb_languageとmb_internal_encodingを
ちゃんと設定していないと駄目。
456 :
454 :03/10/08 00:30 ID:???
>>455 詳細なレスありがとうございます。
試しにpreg_replaceを使った時えらく文字化けしたのでなんでだろと疑問だったんですがこれで解決しました。
一応マルチバイト文字列関数用にphp.iniの設定は書き変えてあるので、
mb_ereg_replaceを使っても将来的に問題ないということならこれでいこうかなと思います。
配列をpackする時ってどうすんの? 他にも$a,$b,@c,$d,…と並べて@cの内容が展開されるようにしたい時とか.
$a="abcdABCD"; $a =~ tr/[a-z][A-Z]/[A-Z][a-z]/; print "content-type:text/html\n\n"; print "$a"; 上のコードをPHPに移植し、 $a="abcdABCD"; $a=strtr($a, "[a-z][A-Z]", "[A-Z][a-z]" ); echo $a; と書いてみたところ、strtr()で正規表現が使えないようなのですが 何か良い方法はないですか。
460 :
nobodyさん :03/10/29 23:14 ID:dIX7j6Ca
perlだと、csvファイルに対してSQL文を投げられる、SQL.pmっていうのがあるんですが、 phpでそういうモジュールってないでしょうか? (いやぁ、ほんとはDB使いたいんですけどね。。。わけあってつかえず)
461 :
nobodyさん :03/11/01 14:03 ID:5TPcc+Om
連休中にphp勉強したいぞーage
>>459 泥臭いけど・・
$a = 'abcdABCD';
$from = implode('',array_merge(range('a','z'),range('A','Z')));
$to = implode('',array_merge(range('A',Z'),range('a','z')));
echo strtr($a,$from,$to);
rangeを使って配列をつくってarray_mergeで配列合体させて
implode(perlでいうところのjoin)で文字列にして置換ってかんじ
連続する文字コードならrangeでいけるよね
463 :
nobodyさん :03/11/03 00:41 ID:4CVQMxAy
perlでいうところの、
print qq|
$hoge
<hr>
<a href="
http://www.yahoo.com "></a>
|;
みたいの、phpでないでしょうか?
要は、変数展開もされて、”もエスケープする必要がないように書きたいのですが・・・
$a =~ tr/[a-z][A-Z]/[A-Z][a-z]/; なんか無駄がないか?
466 :
nobodyさん :03/11/07 15:11 ID:GoKF/NUR
$a = 2; switch($a) { case "1" : global $b = "one"; case "2" : global $b = "two"; case "3" : global $b = "three"; } echo $a." -> ".$b; みたいなことをやりたいのですが、switch文では無理ですか? if,elseif...なら可能なのですが…
>>466 それを実行すると1〜3のどれを$aに入れても$bが"three"になっちゃう
各分岐のお尻にbreak;付けましょうね
switch($a) {
case "1" : $b = "one"; break;
case "2" : $b = "two"; break;
case "3" : $b = "three"; break;
}
470 :
463 :03/11/12 04:51 ID:FrBzA+Qu
>>465 ありがとうございます。
そういえば、php4からヒアドキュメント使えるようになったんですよね。
(php3の知識はあっても、4の知識はあまりないもんで)
ヒアドキュメントで逝ってみます。
ただ、print qq|ほげー|;の手軽さが、なれてしまって、ラクなんですけどね。。。
ともかく、ありがとうございました。
my $xやvar xみたいな変数の宣言をする方法はないのでしょうか?
Perlで$a |= "default a"; という書き方を多用していたのですが、 PHPでは$a = !isset($a) ? "default a" : $a; でよろしいのでしょうか?
$a ||= "default a"; なら、 $a || ($a = "default a"); $a or $a = "default a"; とか。 $a |= "default a"; はそのままで通る。 (perl/PHP共に期待したものではないと思うけど)
475 :
473 :03/11/12 21:19 ID:???
>>474 すみません、先ほどは$a ||= "default a";
のことを言っておりました。
で、$a || ($a = "default a");
ですと、$aが未定義の場合、undefined errorが出てしまいます。
(当方error_reporting = ALLにしています)
>>475 isset($a) || ($a = "default a");
これでどう?
厳密にはこうだろうけど、
(isset($a) && $a) || ($a = "default a");
長すぎ。
# PHP的には、先にデフォルトを設定するものだと思ってた。
# PHPのエロイ人plz。
477 :
473 :03/11/12 22:08 ID:???
> isset($a) || ($a = "default a"); これなら問題なく実行できました。この書き方が一番スマートそうですね。
GETのパラメータ区切りに&じゃなく;を使うにはどうしたらよいのでしょうか?
俺様帰ってこないかな 別に用は無いんだけど
481 :
俺様 :03/12/05 23:06 ID:???
>>480 この板はしばしば見ているぞ。
最近はperl2phpのコンテンツを立ち上げてがんばっているところだ。
>>481 perl2php期待してます。
php勉強してるので…
ソケット通信をする際、相手方のIPアドレスがわかっている場合、 fsockopenの第一引数にIPアドレスを入れれば、 内部的に名前の解決をしなくて済むのでしょうか?
>>484 ttp://jp.php.net/fsockopen IP address がすでにわかってるのに名前の解決?
Ip address => name なら、そもそも必要ない。
fsockopen関数の内部で、PHPが名前え解決するかどうかとういう話であれば、
inet_aton が失敗すれば(第一引数のhostが IP address を表す文字列でない場合)、
名前の解決(gethostbyname)がされる様です。
>>485 >fsockopen関数の内部で、PHPが名前え解決するかどうかとういう話であれば、
>inet_aton が失敗すれば(第一引数のhostが IP address を表す文字列でない場合)、
>名前の解決(gethostbyname)がされる様です。
なるほど、ありがとうございます。
大変参考になりました。
487 :
486 :03/12/17 00:08 ID:???
IPアドレスでfsockopenと、リモホでfsockopenとで、 処理にかかる時間を比べたんですが、 前者の方が多少遅い結果になりました。 perlの場合とはやはり違うのでしょうか…?
488 :
nobodyさん :03/12/18 13:37 ID:SDZbq9mq
perlでいうtr/a-zA-Z//c(a-zA-z以外にマッチして置き換える) っていうのはPHPではどう書けば良いでしょうか?(´・ω・`)?モニュ 小一時間探したけど見つかりませんでした
489 :
nobodyさん :03/12/18 13:59 ID:SDZbq9mq
やりたいことは、リストに含まない文字が 検出されたらエラーを表示させる事です。 perlだと if(($_ =~ tr/a-zA-Z0-9//c) { die 'リストに含まれない文字が検出されたYO!'; } な感じでそれをPHPでやりたいです。
>487 どうせろくでもないベンチスクリプトだろ >488 既出 >789 !
>>489 $str = ...
if (ereg("[^a-zA-Z0-9]", $str)){
die('リストに含まれない文字が検出されたYO!');
}
多分"[^[:alnum:]]"でも。
そういうことじゃないと思う。
494 :
nobodyさん :03/12/21 18:56 ID:16zntf/g
>492 ぇ?ネタですか?(´・ω・`)?モニュ -zA-Z0-9にマッチでエラー表示 じゃないでつ。文字列中に例えば 記号が入ってたらエラーにする処理でつ。
ネタ? 491のでええやん。elseでもいいし。
496 :
492 :03/12/21 21:11 ID:???
>>494 a-zA-Z0-9 *以外* の文字にマッチしたらdieしますが、違うのですか?
asdf
ghjk
499 :
nobodyさん :03/12/23 11:09 ID:hM9+gLxR
>496 ぉぉやってみたら確かにマッチした。さんくすこ。 PHPだと’^’って反転する意味なのですか・・・? なんか小さな幸せを発見したw
500 :
nobodyさん :03/12/23 11:15 ID:hM9+gLxR
ぁぁぼけてすまそ。。。 文字クラスの反転記号ですね。記憶から全く遠のいていますた。 (PHPの独自拡張なのかとさえ思ってしまったw) もう一度勉強し直し逝ってきま _| ̄|○
>>481 で、どのへんまでできた?
なぜかおれも作るハメになってしまって、
BNFで定義しきれないPerlを無理やりBNFレベルで定義中なんだけど。
そこまでPerl詳しくねーんで困ってる。
parrotのライブラリにPerl6のパーサーやってるっぽいんだが、、むずい。
だれか、なんちゃってPerl BNF定義した人おらんですか。。
502 :
501 :04/01/19 18:23 ID:???
ガク コンテンツか。。ツールじゃないのね。。シツレイ
503 :
nobodyさん :04/01/23 00:02 ID:Zt/PsL2C
質問君です。すいません。 idはadmin、passは111111だったとして、 test.php?id=admin&pass=111111と入力します。 test.php内で idとpassの値を受け取るには、$id=param[id]でしたっけ?
504 :
nobodyさん :04/01/23 00:24 ID:Zt/PsL2C
extract($_GET); $_GET["id"]; $_GET["pass"];
506 :
nobodyさん :04/01/23 01:03 ID:Zt/PsL2C
>>505 ここ読みました。
http://php.s3.to/off.txt これも対策済まれている方が多いことですが、
Warning: REG_EBRACK in
eregi関数で文字比較するとき、全角の「ー」の2バイト目が半角では“[”になるのが原因らしい・・
簡単な解決方法ありますでしょうか?
507 :
俺様 :04/01/23 01:17 ID:???
>>501-502 いや、俺もツール考えてみたんだわ。
PHPなら文法定義しているの発見したんだけど
Perlは見つからないんだよね。。。
perly.yにあるyacc文法も読んだんだけど
文法以前に字句解析どうしようって感じで。
>>506 extract() するなら、$_GETでアクセスする必要ないかと…
register_globals=off がデフォになったのは、
未初期化の変数が汚染されたりとか
セキュリティ面の問題が利便性より重要だったからではないのかなぁ
なので、extract()するならその配列の安全チェックをしてからのほうが良いかと。
>>506 後半
内部エンコーディングをEUCかUnicodeにする。
入力変換をautoにする。
これで、内部では、EUCかUnicodeになるので、その手の問題に遭遇しない。
海外製ソフトでSJISはいいことがない。
入力変換はHttpInputだけなので、ファイルを読むときなどはMb_かjcode.phpで 内部エンコードにそろえてやる必要があると思います。
list()でログファイル(5MB程度)を参照して検索などを作るとき、 fopen() flock() Fclose() しなくてもログファイルの破損などは起こらないでしょうか? 書き込み中はロックしてますが、list()中はロックしないとします。
>>511 listでファイルは参照できないはずだが????
513 :
アノニマス :04/02/16 18:58 ID:O91ZKuNr
正規表現でマッチできないけど? どこがおかしいの? //10桁の1...と12桁の2...の配列がある。 $str = array('1111111111','222222222222'); //10桁以上、10桁以下の(要は10桁のみ)数値パターンを配列$resultに格納したい。 $hoge = preg_grep("/[0-9]{10,10}/",$result); //結果、両方でてきちゃう。どうして? print_r($result); よろしこ。
514 :
イ奄様 :04/02/16 19:15 ID:PkrMZZ9m
>>513 それだと
"hoge1234567890hage"とかにもマッチする。
数字で始まり10個目の数字で終わるなら
$result = preg_grep("/^[0-9]{10,10}$/",$str);
515 :
イ奄様 :04/02/16 19:18 ID:???
$result = preg_grep("/^\d{10}$/",$str); でもいい
516 :
アノニマス :04/02/16 19:35 ID:O91ZKuNr
>>514 ,515 イ奄様
有難うございます。なるほどよく分りました。
しかも、問題が間違えているにもかかわらずよく理解してくださいました。
重ねて御礼します。
出したかった問題は、こうでした。
$result = preg_grep("/[0-9]{10,10}/",$str);
まぁ、間違ってんだから訂正は要らないんだけどね・・・。
それは perl でも同じ結果だろうなと。 perlとPHPで結果が違うのかと思ったよw
質問してもいいですか? Perlの「undef」に相当するPHPの関数は何ですか? マニュアル検索しても見つけられなかったのです。 スレ違いでしたらスルーでお願いします。
Perlだと文字列の置換をしたときに置換されたものが$1などの変数に代入されますよね。 PHPでも同じことは出来るのでしょうか?
>>520 自己レスです。
preg_match_allで出来ました・・・
他にいい方法があれば知りたいです。
522 :
nobodyさん :04/04/06 09:54 ID:Rt5G2mKK
自作関数に渡した引数は、Perlでは$_[0],$_[1]...に、 JavaScriptではarguments[0]...に、入るじゃないですか。 PHPでは何に入るのでしょうか? もしかして必ず function x($a,$b,$c) の様にする必要があるのでしょうか? 何とかして引数を配列として扱いたいのです。
>>522 function ほらよ ($配列) { print_r($配列); }
ほらよ(array('a', 'b', 'c'));
>>523 有難う御座ります。
PHPって関数名や変数名に日本語使えたんですね 驚きました。
(^∀^)ゲラゲラ
(^∀^)ゲラゲラ
(^∀^)ゲラゲラ
(^∀^)ゲラゲラ
>>530 Shift_JISでスクリプトを書いてはいけない理由、
どうしてもShift_JISで書きたい場合はどのPHPをインストールすべきとか
mb_string周りのPHP.iniの設定の仕方、設定のオーバーライドの方法を解説して欲しい。
あと、PerlにもHTML埋め込みを行う方法がいくつかあるよ。
>>530 俺もPerlはあまり好きじゃないが
>認めざる終えません。
なんて文章書く人の言語構造をむしろ疑いたい。
>>532 その真珠のヴァージョンは何ですか?
requireを使用するとか笑わせる答えじゃないですよね?
>>533 >しかし、CやJavaなどと比べPerlの方が極力型を意識しない言語仕様
>になっているというのは認めざる終えません。
あーそんな風に書いてたんだね。そのうち、なんとか汁。
# 真珠批判やってるサイトって他にもあるもんだねー。
535 :
532 :04/04/27 05:54 ID:???
マジレスした自分に鬱。
536 :
nobodyさん :04/04/30 23:59 ID:um4DKqqr
perlにおいて、csvファイルを配列に取り込み、複数項目(カンマ区切りの2列目と3列目)でソートをかける為に 下記のような方法を取っていたのですが、 これをphpで行う場合、multisortでは1項目でのソートしか出来ないと マニュアルに記述されていますが、どのような処理でなら可能でしょうか? @DATA = sort { (split(/,/,$b))[1] <=> (split(/,/,$a))[1] || (split(/,/,$a))[2] <=> (split(/,/,$b))[2]; } @DATA;
>>530 あまり真面目に見ていないけど、もっと説得力ある文章になるくらい
たくさんプログラムを作ってみた方が良いんじゃないかな。
今の状態だと言語の違い以前に本当にプログラムを作った事が
あるんだろうかと疑いたくなるよ。
>>535 気にすんな
539 :
nobodyさん :04/05/03 01:13 ID:N715jxDT
ASPユーザですが、PHPへの移行への許可は頂けますか?
>>540 そいつはマジメに運営してないからほっといていいよ。
542 :
nobodyさん :04/05/20 12:08 ID:NShBOzWM
PHP普及の原因は、イスラエル・Zend社のマーケティングの成功にある。
@Perlでは別インストールで多くの人が知らないデーターベース利用を標準で使用できるようにし、「データーベースが簡単に取り扱える」というイメージを特に強く植えつけた。
Aウェブサイト作成への特化。例えば、セッション管理がそうだ。
Bソースの隠蔽による著作権保護を可能にした。
データーベースを使いたいが、使い方がわからない。そこに、PHPなら使えるという情報が先に入る。これで、PHPに入った人もかなり多いはず。
PHPの言語仕様はZendに大きく左右される。
二年ほど前、PHPが出始めた頃には、変数のスコープがPerlとまったく同じ仕様だった。
もともと、Perlのソースコードを改編して作成されたPHP。
↓PHPの歴史
http://php.planetmirror.com/manual/ja/history.php PHPには、Perlコードの退行による高速化の意図が言語のいたるところに見える。
マイクロソフトは、オブジェクト指向への対応というのが大義にVB6.0からVB.NETに言語仕様を大幅に変えた。
今後も大きく言語仕様が変わることはないのか?
オープンソースとは言っても、Zend社の
http://www.zend.com/management.php の数人のスタップによって大きく左右される。
再帰的定義とされる「PHP:Hypertext Preprocessor」という名前にも理由がある。これは、要するに、正確には、「Perl Hypertext Preprocessor」としたいところだが、GNUの「GNU is Not UNIX」という再帰的な定義をもじったものだ。
要するに、「GPLのフリーソフトのライセンスには違反していませんよ!」と一つには主張し、また、一つには、「PHP is Not Perl」とでも言って、Zendの社としての姿勢を、先人の「Perl開発者たち」から擁護する意図があったのだろう。
Nではなく、Hなのが、そのための味噌だ!Perl開発者たちは、当然、面白くないはずだ。
PHP信奉者は、六芒星(hexagram)マークのユダヤ教にでも、入信せよ!
…といいつつ、かく言う私も、PHPに乗り遅れまいと必死だが…。(^^;)
↑もう5回くらい見たんだが。しかも全部IDが同じだ・・・見間違いだよな?
最近やっとphpの配列は、perlの配列のリファレンスだと考えればいいんだとわかった。 んで、phpで関数に配列を引渡すときは、配列のコピーのリファレンスを渡していると考えればいいとわかった。 だから、phpのこれは $array[$index] = $value; perlのこれに対応するわけじゃなく $array[$index] = $value; これに対応しているわけで $array->[$index] = $value; phpのこれは $array = array($val1,$val2,$val3); perlのこれに対応している $array = [$val1,$val2,$val3]; なのでphpのこれは function f($array){ ....... } perlのこれに対応するわけだったんだね。 sub f{ my $array = [@{$_[0]}]; ....... }
545 :
nobodyさん :05/03/03 01:29:07 ID:eDjoFwC+
Perlのlast関数にあたるものはPHPのbreak関数かと思いますが、 next関数にあたるものは何になるのでしょうか? ご教示いただけますと幸いです。
>>545 関数じゃないよ。制御構造と呼んでくれくれたこら
>>544 おれがPHP使い始めたころと同じこと考えとるな
きっと次は$がいらないんじゃないかとか
printした時に自動で配列表示して欲しいとか
正規表現や無名関数使いずれーとか
便利な関数がイパーイあってええねとか
クラスがPerlよりはおしゃれだとか
↓
日本語を変数名に使えるようにすんなよとか リファレンス変数とか可変変数で戸惑うとか 多重継承できないってなんだよとか DBはいいなとか ↓
0.0.1のバージョンアップでコアに新機能を加えたあげくにエンバグって何よとか デフォルトでハッシュな配列はステキですねとか array_map_recursive()きぼんとか ↓
551 :
nobodyさん :2005/11/06(日) 12:54:25 ID:szZvbyxN
perl使いがPHP使いに成ってもスキル低いのには変わらないけどな。 PHP覚える時間と暇があれば、JavaとかCが使えるようにスキル磨け。
意味不明
Cはもう、使う職場が限られている気がするが
保守
保守
保守
558 :
557 :2006/04/28(金) 03:19:25 ID:???
HEAD内のひとつめのSTYLEタグは不要なので消しておk
559 :
nobodyさん :2006/05/15(月) 05:54:56 ID:KM0klNRe
560 :
nobodyさん :2006/09/20(水) 11:53:55 ID:uaOOSUkQ
Perlのqqみたいなの、PHPでできんか?
561 :
560 :2006/09/20(水) 12:00:23 ID:uaOOSUkQ
できんか・・rubyでも同様の文法はあるんだけどなぁ・・。 ヒアドキュメントは、インデントが崩れるので大袈裟でちょっと扱いにくい。
ヒアドキュメントは当然ながら、qqも必要ないもん。
563 :
nobodyさん :2007/05/04(金) 02:57:45 ID:SmDWSadW
保守
このスレの意思とは逆なんですが、 php経験があり、perl未経験です、 perlスクリプトを眺めているのですが、どうもわからない構文が多々あります。 サブルーチン if ($hoge && $> == 0); ↑これってどういう意味を表しているのでしょうか? ifの前にサブルーチンが存在するのと、 $hoge && $> == 0 の意味がわからんです。
$>はuid $hogeが真かつrootで実行されている時だと思う > ifの前にサブルーチンが存在するのと、 Perlの基本的な変体文法なので入門書読め
566 :
nobodyさん :2007/05/09(水) 21:29:36 ID:+HRKvy3U
perlでハッシュの値を出力すると何故か「1/8」になってしまうんですがこれはどうすれば直せますか?
567 :
nobodyさん :2007/09/17(月) 05:29:18 ID:j/liUul9
亀だが >566 $foo=%hoge; print $foo; ってなってんじゃね 鯨のハラワタが散らかってるとか言われる部分だから気にするな perl嫌になてきた だからといってphpも嫌だぜ Lispでもはじめようぜ
早くもPHPユーザのためのPerl入門スレになりつつあるな
アリガd
基礎PHPという教本を読みながら問題を解こうとしているんですが、まったく理解できなくて 悩んでいます。 何方か指南していただけないでしょうか? 問題の内容は以下に、 内容 フォームからPOSTのメソッドを利用して「ユーザー名」と「パスワード」を送信する。 受信したファイルでは「ユーザー名」と「パスワード」の妥当性を判断してメッセージを出力する。 条件 データ送信用ファイル:input.html データ受信用ファイル:check.php input.htmlには2種類のテキストボックスを配置させる(txtNameとtxtPassword) check.phpでは以下の4種類のメッセージを出力させること ユーザー名とパスワードの組み合わせが正しい場合「認証成功!」 ユーザー名が存在しない場合「ユーザー名が存在しません」 ユーザーは存在するがパスワードが誤っている場合「パスワードが間違っています」 ユーザー名またはパスワードのいずれかが空白の場合「ユーザー名またはパスワードが未入力です」 check.phpにおけるユーザー名とパスワードの組み合わせは以下のとおりとする。(3ユーザー分) ユーザー名:guest admin shs0000 パスワード:goma adm 0000 スクリプト内での以下の配列に格納し、プログラムによって判断を行うこと。 ユーザー名:$arrUser $arrUser = array(・・・・); パスワード:$arrPass $arrPass = array(・・・・); ヒントでfor,if文を使うとあります。 どうかお願いします。
571 :
nobodyさん :2007/10/04(木) 11:12:02 ID:Ba37oSfY
ここに神がいることを祈ります。 これ ↓ $a1="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./"; $a2=substr($a1,int(rand(64)),1).substr($a1,int(rand(64)),1); $cryptpass = crypt($pass,$a2); をPHPで同じことさせるにはどうしたらいいのでしょうか・・・
int(rand(64)) => rand(0, 63) これだけ代えればいけるんじゃね?
573 :
nobodyさん :2007/10/04(木) 14:18:23 ID:Ba37oSfY
>>572 あなたは神だ。
ありがとうございました^^
本当助かりました。
>>570 まずPerlでかけるのか?
かけないなら質問スレいってこい
漠然とした質問で申し訳ないが 単なるテキストファイルをincludeするだけだったら SSIとPHPとどっちがサーバ負荷が少ないかな?
基本同じくらい ただ、組み込むモジュールmod_includeとmod_phpではmod_phpの方が断然メモリ食う
>>576 遅くなったがありがトン
すでに構築されてるサイトを引き受ける事になったんだけど
SSIだらけだったんでちょっと気になってね
PHPの方が利便性良さそうなんで移行しようかと思ったけど静観かな
&ReadParse; while (($key,$val) = each %in) { って言う良く見るPerlをphpで書き直すと? extractだとPOSTとGET両方は拾えないみたいですし。 キーごとに処理を分けるのは、phpではどうしたら? 教えて下さい神様。
if(isset($_POST)) { while(list($key, $val) = each($_POST)) { //POST変数が存在する数だけループ $key $valで所得->処理 } } if(isset($_GET)) { while(list($key, $val) = each($_GET)) { //GET変数が存在する数だけループ $key $valで所得->処理 } } かな?後、 import_request_variables("GPC","{re_ とか何か接頭辞}"); を使うとGET,POST,COOKIEを一度に変数へ展開できる。 Perlの方が良く解らないので見当はずれだったらごめん。
ありがとうございます。 上述の方法でやってみます。 助かりました!
>>578 だとgetだろうがpostだろうが
すでに%inに入ってる訳だがその辺は良いのか?
>>579 俺はPHPはイマイチなんだが、$_POSTか$_GETを判別して別のハッシュに入れ
そのハッシュをeachした方が良くね?
>>581 Perlでいうハッシュ=連想配列:$QUERY{$key} = $valで、
$_POSTや$_GETは既に判別された後のハッシュと同じと解釈してますが、
実際どうなんだろう?
いや、ループの前に$_POSTでも$_GETでも1つにしちまえば ループ自体が1つに出来るっていう話
つ $_REQUEST
>>584 そんな便利なのあるんだな
元質問者じゃないが勉強になったよ
DMYHMS形式をエポック秒に変換したいんだすが、 Perlのtimelocal()的なものがphpでありますでしょうか?
お前は風大左衛門かw こんな感じでどうだす? mktime(HH,MM,SS,mm,dd,yyyy);
文字列の小数点以下を削除しようと思って、("3.1415"→"3") $PI = ereg_replace("\.\d*", "", $PI); とすると、31415になってしまいました。perlの s/\.\d*//; だとうまくいくのですが、何かPHPでの注意点ありんすか?
perlちとPHPとで、正規表現がちがうでよ。 $PI = ereg_replace("\.[0-9]*", "", $PI); $PI = preg_replace("/\.\d*/", "", $PI); こんなんどうだべ?
>>590 ズッポシです!ありがとうございました。
PHPのエラー処理は、以下の三つくらいがあげられますが、 どれを使うのが一番なのでしょうか? ・tryとcatch ・set_error_handler ・PEAR_Error 自分は、try catchが一番いいと思いつかっています。
∧_∧
( ・∀・) | | ガガッ
と ) | |
Y /ノ .人
/ ) .人 < >_∧∩
_/し' < >_∧∩`Д´)/
(_フ彡 V`Д´)/ / ←
>>416 / ←
>>343
同じだから移行して何の意味があるのかわからん