【待望】PerlユーザのためのPHP入門
■ このスレッドは過去ログ倉庫に格納されています
0001俺様
03/02/27 15:17ID:tJsRCtRD両者の違いを中心に講義してやる。
今までPerlマンセーだったやつはこれを機にPHPに変更しよう也。
質問もガンガン書いてくれ。
このPerlの文はPHPだとどう書くの?とか。
0003俺様
03/02/27 15:19ID:tJsRCtRD例えば変数の宣言、初期化をしてみよう。
$foo = 0;
頭に$をつけるところも、型を特に指定する必要がないことも、
文末は;になることもみんな一緒だ。
ほら、簡単に移行できそうに思えてきただろ?
0004俺様
03/02/27 15:31ID:tJsRCtRD<?
print "Hello, world!\n";
?>
printの意味はperlと一緒だ。
まあ、printよりecho使う人が多いがそんなに違いはない。
perlユーザならわかりやすい方が(・∀・)イイ!だろう。
プログラムの開始と終了は<?と?>で囲むんだ。
これはPHP特有だから早く覚えよう。
<?じゃなくて<?phpで囲んでもOK。将来XMLとの連携を考えるなら
後者で書く癖をつけたほうが良いとは言われている。
0005nobodyさん
03/02/27 15:37ID:8ZVFA0UHhttp://www.pink-angel.jp/betu/index.html
0006nobodyさん
03/02/27 15:39ID:???0007俺様
03/02/27 15:50ID:tJsRCtRD例えば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としてしか使えないから駄目。間違えるなよ。
0008俺様
03/02/27 15:55ID:tJsRCtRDどういう用途で用いるのか知らんが
PHPスクリプトをrequire()するなら当然
そっちも<? ?>は必要だぞ。
まあ、聞くより自分で確かめたほうが早いだろう。
0009俺様
03/02/27 15:59ID:tJsRCtRD詳しく解説しているところを見たほうが早いか。
始めたばかりの頃俺が参考にした所だ。
http://www.php-j.com/tutorial/install/win.php
では各自ローカルでPHPを動かせるようにしておきましょう。
その瞬間からPerlとはおさらばだ!
0010nobodyさん
03/02/27 16:05ID:???0011nobodyさん
03/02/27 17:01ID:+18aFIzUここ以外にバイナリって無いんですか?
http://www.php.net/downloads.php
0012俺様
03/02/27 17:15ID:tJsRCtRDそこのじゃ嫌なのか?
そこからで全然問題ないと思うが。
0013nobodyさん
03/02/27 17:57ID:???0014nobodyさん
03/02/27 18:00ID:oT8eTv8K0015俺様
03/02/27 20:27ID:tJsRCtRD能や予、表などの漢字を使うときに文字化けしないように
\能、\予、\表みたいな面倒な書き方をする必要があっただろう。
PHPでは大半の人がEUCの日本語コードで記述していて
そのような必要はない。
と、言うわけでEUCを読み書き・保存できるエディタを用意しておきましょう。
例えば、Windows標準のメモ帳では無理です。
まあ、ベクターとかでEUCって検索すればすぐに見つかる。
http://channel.goo.ne.jp/download/search/search.php3?MT=euc&CD=1&SW=1&OS=3&category=1&search_num=10
シェアウェアのものでよいならば秀丸やEmEditorがお奨め。
0016nobodyさん
03/02/27 21:11ID:???関数の引数にハッシュを使う方法ってありますか?
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";
}
でも無理でした。
0017俺様
03/02/27 21:36ID:tJsRCtRDPHP固有の質問はこっちへ書き込もうぜ。
【PHP】質問スレッド Part7
http://pc2.2ch.net/test/read.cgi/php/1044478561/l50
0018nobodyさん
03/02/28 04:10ID:???$name="john";
$say=sub{return "My name is $_[0].";};
print &{$say}($name);
はPHPで書くとどうなりますか?
0020nobodyさん
03/02/28 08:36ID:???<?php
$name = "jhon";
function say($name) {return("My name is $name");}
echo say($name);
?>
0021nobodyさん
03/02/28 09:16ID:TC5rJBdjブラウザでパースもできんようになるし。
MVCにしろや。
0022俺様
03/02/28 10:31ID:???お答えサンクス。
と、いうわけでもうインストールはばっちしだと思うので
今日はユーザー定義関数についてから話そう。
超独自仕様のPerとの大きな違いの1つだ。
まあ、はっきり言っちゃえば
>>18みたいな書き方はPerlではごく普通だが
Perl知らない人から見れば何なのかさっぱりってほど特殊だ。
それに比べてPHPの>>20は他の言語
(例えばJavaとか)しか知らない人が見ても何となく理解できるだろう。
002318
03/02/28 10:35ID:???レスどうもです。
無名サブルーチンみたいなのが使いたいなと思っていたのですが、
create_function関数というのがあるみたいですね。
http://www.php.net/manual/ja/function.create-function.php
<?php
$name="john";
$say=create_function('$name','return "My name is $name.";');
print $say($name);
?>
0024俺様
03/02/28 10:51ID:???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も実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。
0025俺様
03/02/28 11:03ID:0fBPA0clおかげでデフォルト引数を簡単に実現できる。
<?php
function foo2($a ="俺様") {
print "$a は凄い<br>";
}
foo2("お前");
foo2();
?>
/*
お前 は凄い
俺様 は凄い
*/
引数を指定しなかったら勝手に俺様が凄くなってくれるのだ。
0026nobodyさん
03/02/28 11:04ID:???0027nobodyさん
03/02/28 11:04ID:???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も実際は@_という配列を渡しているわけだし。
まあ、こうやって見ると両方大した違いは無く見えるが
変数のスコープについて根本的な違いがあるので注意しよう。
それについては後述。
0028俺様
03/02/28 11:08ID:0fBPA0cl#Perl code
$a=26;
print "$aゲット";
#26ゲット
-------------
#PHP code
$a=26;
print "$aゲット";
#(何も表示されない)
----------------------
両者にはこのような違いが起きてしまう。
下はどうすればよいのか各自考えてみましょう。
出かけるので解答は夜で。
0029俺様
03/02/28 11:09ID:0fBPA0cl0030俺様
03/02/28 11:10ID:0fBPA0cl俺様はPHP歴浅いので
崩壊どころか理論自体形成されていない。
だからこのスレタイは入門だ。
間違いはがんがん指摘してクレイ!
0031nobodyさん
03/02/28 11:13ID:njt3nQcM俺はPHPすら分からない。
だから、がんがん解説してクレイ!
0032nobodyさん
03/02/28 11:19ID:???Perl/Php Translation
http://www.cs.wcupa.edu/~rkline/perl2php/
既出だったらゴメン。
0033俺様
03/02/28 11:21ID:0fBPA0clそれは便利だな。
では今後はそこに載ってないやつを指摘していくことにしよう。
0034nobodyさん
03/02/28 11:25ID:???<?php
$name = "jhon";
function say($name) {return("My name is $name");}
echo say($name);
?>
0035nobodyさん
03/02/28 11:26ID:???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] ";
0036nobodyさん
03/02/28 11:32ID:???変数名の後ろは全角文字でもダメみたいですね。
(半角の「.」はOKだった)
#PHP code
$a=26;
print $a."ゲット";
#26ゲット
#PHP code
$a=26;
print "$a.ゲット";
#26.ゲット
0038nobodyさん
03/02/28 12:12ID:???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] ";
0039nobodyさん
03/02/28 12:41ID:???0040俺様
03/02/28 20:06ID:R6lXT7Vm_n
( l _、_
\ \ ( <_,` )
ヽ___ ̄ ̄ ) グッジョブ!!
/ /
>>37
_、_
( ,_ノ` ) n
 ̄ \ ( E) グッジョブ!!
フ /ヽ ヽ_//
0041俺様
03/02/28 20:12ID:R6lXT7Vm自分はこのせいで某スクリプトを
PerlからPHPに移植する際に、
30分ぐらい睨めっこした記憶があるので。
頭の中に入れて起きましょう。
$a=26;
print "{$a}ゲット";
print $a."ゲット";
0042nobodyさん
03/03/01 11:16ID:5K/2+grl>>9の通りしましたがapacheが起動できません。
どうやらhttpd.confのLoadModule php4_module C:/php/sapi/php4apache.dllが原因のようです
php4apache.dllをphp4apache2.dllとしても同じでした。
WinME Apache2.0.39です
0044俺様
03/03/01 12:12ID:UE12tRyAApacheは2よりも1.3.27の方がいいと思う。
後はなんだろな〜
Meなんて怪しいOS使ったことないからな。
とりあえずApacheのバージョンを変えて試してみてクレイ。
0045nobodyさん
03/03/01 12:41ID:5K/2+grlありがとうございます。1.3.27を使ったら起動できました。
0046nobodyさん
03/03/01 16:35ID:???|_|Д`) < それだー!!
|文|⊂)
| ̄|∧|
 ̄ ̄ ̄ ̄ ̄
| | ∧
|_|Д`) < それだー!!
|文|⊂)
| ̄|∧|
 ̄ ̄ ̄ ̄ ̄
| | ∧
|_|Д`) < それだー!!
|文|⊂)
| ̄|∧|
 ̄ ̄ ̄ ̄ ̄
| | ∧
|_|Д`) < それだー!!
|文|⊂)
| ̄|∧|
 ̄ ̄ ̄ ̄ ̄
| | ∧
|_|Д`) < それだー!!
|文|⊂)
| ̄|∧|
 ̄ ̄ ̄ ̄ ̄
0048俺様
03/03/01 17:05ID:UE12tRyA世の中は理詰めだけでは解決しない。
理論ヲタになるより、わかりやすさを求める方が現実的だ。
わかるかい?
しかも、PHPと直接は関係ない。
君は文学者がテイラー展開を出来なかったら馬鹿にするだろうか?
では、今日はいよいよ変数のスコープについての説明だ。
あくまでも対象者は基本的に『Perlしか』やったことがない人のみ。
C言語など他の言語をやっている人には馬鹿見たく思われる説明になるからだ。
0049nobodyさん
03/03/01 17:07ID:???>君は文学者がテイラー展開を出来なかったら馬鹿にするだろうか?
少なくとも数学者を目指す文学者がマクローリン展開を知らなければバカにするが。
0050俺様
03/03/01 17:30ID:UE12tRyA俺様はべつにオペレーティングシステムのエキスパートを目指してはいないッポ。
#Perlscript
sub foo{
$a = 100;
print "$a,";
$a++;
}
&foo();
print $a;
#100,101
まあ、当たり前の結果が表示されます。
これをPHPに書き換えてみましょう。
0051俺様
03/03/01 17:34ID:UE12tRyA<?php
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
?>
# 100,
何故か100しか表示されません!?( ̄□ ̄;)ナント!!
どうして後ろの$aは表示されなかったのでしょうかという問題です。
0052俺様
03/03/01 17:41ID:UE12tRyA#Perl
sub hoge{
print $a;
}
$a="俺様";
&hoge;
----------
#PHP
function hoge(){
print $a;
}
$a="俺様";
hoge();
Perlの方だと見事、俺様と表示されるのですが、
後者の方は何も表示されないので吃驚仰天です。
0053nobodyさん
03/03/01 17:47ID:???>俺様はべつにオペレーティングシステムのエキスパートを目指してはいないッポ。
いや、エンジニアでなくても車=ベンツとか思ってる奴はアホなわけで。
教養ではなく常識なのよ。常識。
0058俺様
03/03/01 19:06ID:UE12tRyAまあ、教養が無かった俺様が厨ってことで
その話題は終わりにしよう。スレ違いだし。
0059nobodyさん
03/03/01 19:09ID:xu/mDseRhttp://www.pink-angel.jp/betu/linkvp/linkvp.html
0060nobodyさん
03/03/01 19:29ID:???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;
と同じ
#始めたばかりなので全く同じかどうかとか用語の使い方は正しくないかもしれません
0061nobodyさん
03/03/01 19:56ID:???<?php
$a = 999;
function foo(){
$a = 100;
print "$a,";
$a++;
}
foo();
print $a;
?>
#100,999
なーる。
0062俺様
03/03/01 19:58ID:gsC9ephA(*゚▽゚ノノ゙☆パチパチ
Perlにおいていわゆるmyを付けた場合が
PHPでは標準になっています。
C言語などの場合はコンパイル時に
未定義(未宣言)の変数だ!ってエラーを出してくれるのですが、
PHPではそのまま初期値(文字なら空白、数字なら0)として
認識してしまうので注意しましょう。
結構すんなり受け入れられるのかなー?
普段からmyを使ったりしている人なら問題ないだろうけど
プログラミング言語をPerlしかやってないでグローバルなのが当たり前だって
思ってた人には受け入れるのに時間が掛かるかもしれない。
そんなことないか?どうだろう。
0063nobodyさん
03/03/01 20:01ID:Ddm3hU+C0064俺様
03/03/01 20:08ID:gsC9ephA扱いたい場合も書いておきましょう。
これは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]
0065俺様
03/03/01 20:25ID:UE12tRyAそれについても書いておきましょう。
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の値をいじることは出来ません。
0066生徒B
03/03/01 20:39ID:???0067nobodyさん
03/03/01 20:50ID:???my $static = 0;
sub foo () {
return ++$static;
}
}
0068nobodyさん
03/03/01 21:03ID:b+i+15ud0069俺様
03/03/01 21:27ID:UE12tRyAすまんが俺様は知らんな。
全ての定義済の変数を配列で返すような
関数ならあるが。
<?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 )
0070nobodyさん
03/03/01 21:29ID:???0071俺様
03/03/01 21:32ID:UE12tRyAなるほど。Perlでstaticを実現した例ですね。
まあ、PHPの場合はわざわざ自前で作らなくても
最初からstaticという命令が用意されているということです。
0072俺様
03/03/01 21:35ID:UE12tRyAPerlをある程度理解していれば
わかるようにしたいのだが、
(Perlも未経験という場合はちょっと厳しいです。)
どこら辺がわからんだろうか?
とりあえずPerlのsubをfunctionに置き換えちゃえばOKだ。
0073nobodyさん
03/03/01 21:35ID:???0075nobodyさん
03/03/01 22:00ID:???0077nobodyさん
03/03/01 22:16ID:???0078生徒B
03/03/01 22:22ID:???error_reporting(E_ALL);
print $a;
?>
#<b>Notice</b>: Undefined variable: a in <b> (filename)
# </b> on line <b>3</b><br />
>>76
ありがとう。うまくいきました。
0079nobodyさん
03/03/01 22:23ID:???0080俺様
03/03/01 22:30ID:UE12tRyA(・∀・)イイ!
φ(.. )メモシテオコウ
error_reporting(E_ALL);
0081nobodyさん
03/03/01 22:35ID:???0082nobodyさん
03/03/02 00:05ID:???0083俺様
03/03/02 19:03ID:SRraTB8eまず、Perlの場合配列値を表す変数は先頭が$でなく@になっていた。
しかしPHPではそんな面倒なことはない。どんな場合でも先頭は$でOKだ!
凄い楽そうだろ?(祝
初期化の差はこんな感じだ。
#Perl
@a = (20,10,30,3);
#PHP
$a = array(20,10,30,3);
arrayって余計な文字が付いたが細かいことは気にするな。
0084俺様
03/03/02 19:10ID:SRraTB8e$a[] = "a";
$a[] = "b";
$a[] = "c";
$a[0] = "a";
$a[1] = "b";
$a[2] = "c";
この2つが同じ意味となるのだ。
角括弧内の数字を省略した場合、
値は配列に最後の要素として勝手に追加してくれる。
まあ、こういう独自仕様は混乱の元だから俺は上の形式で書いたことは無いがな。
わかった上で使うなら利用場面は結構多いかもしれない。
0085nobodyさん
03/03/02 19:12ID:L99j8QKUhttp://www.pink-angel.jp/betu/linkvp/linkvp.html
0086俺様
03/03/02 19:19ID:SRraTB8eあとは>>32のサイトや公式のマニュアルでも読んでくれ。
Perlで実現できてたことの代替手段は大体存在してる。
0087俺様
03/03/02 19:26ID: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];
0088俺様
03/03/02 19:28ID:FrxqKaYz0089nobodyさん
03/03/02 19:51ID:???こういうのはどう書く?
0090nobodyさん
03/03/02 20:32ID:???0091俺様
03/03/02 21:07ID:FrxqKaYzうーん、よくわからんな(汗
誰かわかる人募集中だ!
まあ、とりあえず根性で全部書いておけ。
$a = array(
"a" => $b[1],
"b" => $b[2],
"c" => $b[3],
)
0092nobodyさん
03/03/02 23:06ID:???0093nobodyさん
03/03/02 23:16ID:???見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
見ずらいんだよ。
0094nobodyさん
03/03/02 23:20ID:???0095nobodyさん
03/03/02 23:27ID:???( ´∀`)<きもい。きもい。
( つ
(_○___)
0096nobodyさん
03/03/02 23:31ID:???俺は「俺様」じゃないです。
0097nobodyさん
03/03/03 04:20ID:???0099俺様
03/03/03 10:08ID:gt/b6+qo>>98
需要も少しはあるようだからまあ、多めに見てもいいじゃないか。
WebProg板ってスレ保持数に比べて活性化しているスレ数が非常に少ないから
他のスレがdat落ちして困るとかも無いしな。ウザかったら見なければ(・∀・)イイ!
2chブラウザ使ってこのスレごとあぼーんだ。
0100俺様
03/03/03 10:33ID:gt/b6+qoPHPもPerlもJavaやC++に代表されるオブジェクト指向言語である。
Perlのオブジェクト指向についてあまり知らないんですが、
Javaに比べるとPHPのオブジェクト指向に関する仕様は
ショボイ!!!!
今年中に出る予定のPHP5で大幅に機能がアップするらしいので
それに期待しましょう。
0101俺様
03/03/03 10:48ID:gt/b6+qoオブジェクト指向を用いるメリットは何か?
ということだ。
再利用ができる?
そんなのオブジェクト指向じゃなくてもしてるじゃないか。
我々はprintという出力命令を何度も利用している。
printの命令が内部でどういう仕組みになっているか調べたことのある人は極少数だろう。
0102俺様
03/03/03 11:12ID:gt/b6+qo再利用『しやすく』はなるだろう。
まず、カプセル化(データ隠蔽)というものがある。
人間というオブジェクトの例で考えてみよう。
人間は体重というデータを持っているが
我々は外見から見ただけでは体重を正確には知れない。
例えば、彼に『体重計に乗れ』ってメッセージを送れば
正確な体重を得ることが出来る。
同様に体重に『直接』アクセスして値を変えることは出来ない。
彼に『〜を食べろ』ってメッセージを送れば
その食べた分だけ体重が増加してくれるのである。
つまり、内部で保持しているデータを隠蔽できて、
見たり変えたりするには間接的にアクセスする必要があるということなのだが、
PHPではアクセサ(アクセス制限)の概念が存在しないため
このカプセル化があっさり崩壊してしまう。
0103俺様
03/03/03 11:35ID:gt/b6+qo既存のクラスのフィールド(データ)やメソッド(機能)を引き継いで、
その上で既存の機能を修正したり新たに追加したりできるようになる。
まあ、言い方を変えれば『継ぎはぎ』みたいなものだ。
PHPでは多重継承が存在しない。
つまり、あるクラスに対して1つの親クラスからしか
フィールドやメソッドを引き継げないということだ。
同じく多重継承が禁じられているJavaではこのようなことがしたければ
interfaceで代替が可能だが、
PHPではその代替案すら用意されていない。
多重継承なんかしなくてもプログラムは作れるという主張も根強いが、
まあ、それを言ったら継承なんかしなくてもプログラムを作れる
と言っても同じようなことである。
0104俺様
03/03/03 12:07ID:gt/b6+qo因みに、このように変数に日本語使っても大丈夫だ。
(普段はお奨めしない。)
<?php
class 人{ //クラス名
var $体重; //フィールド
function 人($値){ //コンストラクタ(初期化)
$this->体重=$値; //値をフィールドへ代入
}
function 体重計に乗る(){ return $this->体重;} //体重を出力するメソッド
function 食べる($量){ $this->体重+=$量;} //体重を量だけ加える
}
$俺様=new 人(60);
print $俺様->体重計に乗る();
print ",";
$俺様->食べる(0.5);
print $俺様->体重計に乗る();
#60,60.5
?>
0105俺様
03/03/03 12:10ID:gt/b6+qo$this->体重
このように$thisとかいうものが必要なのだ。
(Javaの場合は省略可能)
これは長いコードを書こうとするとわかるが面倒すぎ。
0106俺様
03/03/03 12:16ID:gt/b6+qo<?php
class 人{
var $体重;
function 人($値){
$this->体重=$値;
}
function 体重計に乗る(){ return $this->体重;}
function 食べる($量){ $this->体重+=$量;}
}
$俺様=new 人(60);
$俺様->体重 = 200; //おいおい、勝手に体重変えられたYO!
print $俺様->体重; //体重計使わなくても調べられるのかYO!
#200 俺は相撲取りじゃねえYO!
?>
てなわけで体重計とかのメソッドを作る意味がなくなってしまうのだ。
(Javaの場合はフィールドの前にprivateを付けるなどすれば
このような直接アクセスを防ぐことが出来る。)
0107俺様
03/03/03 12:26ID:gt/b6+qo<?php
class 人
{
var $体重;
function 人($値){
if($値<0) print "( ´,_ゝ`)プ";
else $this->体重=$値;
}
}
$俺様=new 人(-20);
#( ´,_ゝ`)プ
?>
このように体重に負の値が入れられるのを
防ぐことが出来る。
まあ、>>106のようにされたら結局は意味が無いのだが・・・
0108俺様
03/03/03 12:30ID:gt/b6+qoPHPのオブジェクト指向は
現在の仕様では大したことがないということで
積極的に使う必要は無いだろう。
機能をグループ化したい人とか、
『何となくかっこいいことしたい人とか』
(ただし、使い方を誤ると逆にかっこ悪くなる)
にはしても損は無い程度だろうか。
いずれにしてもPHP5に期待。
0109俺様
03/03/03 12:33ID:gt/b6+qo最近の本とか見るとメリットしか書いてなくて
オブジェクト指向マンセーになる奴が多すぎる気がするから
敢えて逆行して書いただけで、
メリットをもっと強調するのなら実際は
そこまでひどいわけでもないがな。
0110nobodyさん
03/03/03 23:34ID:???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ブラウザ使ってこのスレごとあぼーんだ。
0111nobodyさん
03/03/03 23:34ID:???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ブラウザ使ってこのスレごとあぼーんだ。
0112nobodyさん
03/03/03 23:34ID:???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ブラウザ使ってこのスレごとあぼーんだ。
0113nobodyさん
03/03/04 02:34ID:???0114nobodyさん
03/03/04 05:05ID:???0116俺様
03/03/04 10:17ID:SJwb4sM+まあ、使わなければならない機能でもないから放って置いてくれ。
今日はそろそろ具体的なHTMLドキュメントの作成方法に入っていこう。
>>113
気をつけます。
>>114
(TдT) アリガトウ
>>115
俺様は朝5時になんか起きれん。
0117俺様
03/03/04 10:29ID: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ドキュメントと出力される。
0118俺様
03/03/04 10:50ID: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
0119俺様
03/03/04 11:00ID:SJwb4sM+利点として主張されることも多い。これは以下のように書けるからである。
<?php $title = "タイトル"; ?>
<html>
<head>
<title><?php $title ?></title>
</head>
<body>
俺様のHTMLドキュメント
</body>
</html>
このように必要な部分だけをPHPスクリプトとして認識させることが出来る。
コメントについても書いちゃおう。
Perlでは#のみだったがPHPではJavaなどで使われている以下の形式も可能である。
// コメント。#と意味は同じ。
/* これもコメント。複数行をコメントか出来るのが特徴。
つまりここもコメントになる。 */
0120俺様
03/03/04 11:11ID:hLFJ4wUF簡単なカウンタなら
カウント保存用の空ファイルさえアップしておけば
ほんの数行であっという間に出来てしまうのだ。
明日はファイル入出力をやろう。
0122nobodyさん
03/03/04 18:41ID:Nso2bqOxhttp://www.h4.dion.ne.jp/~sohotop/
日給2万円も無理じゃない!!!
0123nobodyさん
03/03/04 18:50ID:???ねずみ講じゃないの?
0124nobodyさん
03/03/04 18:55ID:QqzA7g890125nobodyさん
03/03/04 19:35ID:???0126nobodyさん
03/03/04 21:46ID:???OOの無いPHPを使う位なら俺はPerlを使う。
0128俺様
03/03/05 10:25ID:RSVIcXg3まあ、まずはOOを使うメリットをよく考えないと。
モジュールでも作るのか?
>>127
OOの入門レベルなら
プログラミング全体で見てもやはり入門であることには違いない。
0129nobodyさん
03/03/05 10:41ID:???0130俺様
03/03/05 10:50ID: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
0132俺様
03/03/05 11:07ID: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>
0133俺様
03/03/05 11:16ID:RSVIcXg3オマエモナー
0134俺様
03/03/05 11:25ID:RSVIcXg30135俺様
03/03/05 11:27ID:RSVIcXg3http://php.s3.to/counter/
同時アクセスの際の弊害が置きにくくなるからそっちの方がいいだろう。
flockもしておくこと。
0136俺様
03/03/05 11:56ID:5JBlRiko利点として主張されることも多い。これは以下のように書けるからである。
<?php $title = "タイトル"; ?>
<html>
<head>
<title><?php $title ?></title>
</head>
<body>
俺様のHTMLドキュメント
</body>
</html>
このように必要な部分だけをPHPスクリプトとして認識させることが出来る。
コメントについても書いちゃおう。
Perlでは#のみだったがPHPではJavaなどで使われている以下の形式も可能である。
// コメント。#と意味は同じ。
/* これもコメント。複数行をコメントか出来るのが特徴。
つまりここもコメントになる。 */
0137nobodyさん
03/03/05 13:34ID:E53JqQ+I下のようなのが沢山あるのでなるべくif文は使いたくないんです。
例1:(Perl)
printf "<a href=\"%s\" target=\"%s\">%s</a>\n",&link($a?$b:$c),$d?"_blank":"_top",$d?"新しいウィンドウで開く":($e?"次のページ":"更新");
0138nobodyさん
03/03/05 13:39ID:???(式1) ? (式2) : (式3);
この式は、式1 がTRUEの場合に 式2 を、 式1 がFALSEの場合に 式3 を値とします。
と、PHPマニュアルからまんま転載してみる。
0140俺様
03/03/05 14:02ID:5JBlRikoCGI版では利用できません。Apache モジュールPHPスクリプトにお いて、header()
関数を使用して "Authentication Required" メッセージをクライアントブラウザに送る
ことが可能です。 これにより、クライアントブラウザにユーザー名とパスワードを入力する ウイ
ンドウがポップアップ表示されます。一度、ユーザーがユーザー名と パスワードを
入力すると、PHP スクリプトを含むその URL は、次回以降、 定義済みの変数 PHP_AUTH_USER, PHP_AUTH_PW, and PHP_AUTH_TYPEにそれぞれユーザー名
、 パスワード、認証型を入力してコールされます。 定義済みの変数は、配列 $_SE
RVER および $HTTP_SERVER_VARS でアクセス可能です。 "Basic" 認証のみ
がサポートさ
れています。詳細は、 header()を参照下さい。
0141俺様
03/03/05 19:13ID:RSVIcXg3俺様の騙りがついに
キタ━(゚∀゚)━( ゚∀)━( ゚)━( )━(゚ )━(∀゚ )━(゚∀゚)━!!!!
0142nobodyさん
03/03/05 19:16ID:juhSxd8a0143nobodyさん
03/03/05 21:23ID:???0145nobodyさん
03/03/05 22:51ID:???PHPはこれ書ける?
0146俺様
03/03/05 23:06ID:MFbIbSdyまあ、1日にいくつも書くの疲れるから。
あせらず明日まで待ってクレイ。
>>144
実際に使うなら、ファイルロックしないと( ゚д゚;)マズーだろうな。
シンプルカウンタは>>135のを使ったほうが良い。
>>145
?と:が逆じゃん?
>>138
0147nobodyさん
03/03/05 23:17ID:5JBlRiko三項演算子まともに使えない自作自演俺様晒しage
0150nobodyさん
03/03/06 00:48ID:???Perlは三項演算子を左辺値として使える。
って全然利用価値はないけど、知ってるか試しただけ。
0151nobodyさん
03/03/06 00:49ID:???0152nobodyさん
03/03/06 01:02ID:uZwldhHhひっかかってた俺様晒しage
0155俺様
03/03/06 01:13ID:ZBXb+hSMとりあえず
$a ? $b : $c = 1;
って正しく書いてくれたら面白かったのに。
まあ、またそういうのがあったら引っ掛けてみてクレイ。
0157俺様
03/03/06 01:34ID:ZBXb+hSM$a ? $b : $c = 1;
これは$aがまだ初期化されていないため
falseとみなされて$cに1が代入される。
ところが、
$a=true;
$a ? $b : $c = 1;
このようにしても$bには1が代入されていなかった・・・
ちなみにPerlの場合はちゃんと$bに1が代入されてました。
というわけでどうしてPHPだと代入されないのかを考えて見ましょう。
PerlとPHPの違いですね。
0158nobodyさん
03/03/06 01:36ID:???0159nobodyさん
03/03/06 01:41ID:???0160nobodyさん
03/03/06 01:42ID:???なんと関数も左辺値にできる(ver 5.6辺り(?)以降から..)
my %hash;
sub hoge : lvalue {
my $key = shift;
return $hash{$key};
}
hoge('test') = 1;
print $hash{test};
0162nobodyさん
03/03/06 01:52ID:???return を使ってはいけない。とのこと。
sub hoge : lvalue {
my $key = shift;
$hash{$key};
}
0163nobodyさん
03/03/06 03:27ID:???こんな書き方があるとは、知らなかった。。
0164nobodyさん
03/03/06 07:56ID:???$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がまだ初期化されていないため
0165nobodyさん
03/03/06 07:56ID:???$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の違いですね。
0166nobodyさん
03/03/06 07:59ID:???0167俺様
03/03/06 08:26ID:0wTJZFjphttp://www.php.net/manual/ja/language.operators.php
演算子の優先順位が
=より:?の方が高いから
$a?$b:$cの方が$c=1より先に評価されるはずじゃない?
でもこうやってみたら$aが真のときに
$bに1が代入されてたからやっぱ>>161のいう通りかな。
$a ? $b = 1: $c;
しかし、いいかげんな仕様だね。
0168nobodyさん
03/03/06 08:29ID:???http://www.php.net/manual/ja/language.operators.php
演算子の優先順位が
=より:?の方が高いから
$a?$b:$cの方が$c=1より先に評価されるはずじゃない?
でもこうやってみたら$aが真のときに
$bに1が代入されてたからやっぱ>>161のいう通りかな。
$a ? $b = 1: $c; >>161
http://www.php.net/manual/ja/language.operators.php
演算子の優先順位が
=より:?の方が高いから
$a?$b:$cの方が$c=1より先に評価されるはずじゃない?
でもこうやってみたら$aが真のときに
$bに1が代入されてたからやっぱ>>161のいう通りかな。
$a ? $b = 1: $c; >>161
http://www.php.net/manual/ja/language.operators.php
演算子の優先順位が
=より:?の方が高いから
$a?$b:$cの方が$c=1より先に評価されるはずじゃない?
でもこうやってみたら$aが真のときに
$bに1が代入されてたからやっぱ>>161のいう通りかな。
$a ? $b = 1: $c;
0169イ奄様
03/03/06 09:07ID:???Perl
$a?$b:$c=1;
PHP
$a?$b=1:$c=1;
0170俺様
03/03/06 09:53ID: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>
0171俺様
03/03/06 10:10ID:0wTJZFjp#!/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を用いないとさらに面倒である。
0172俺様
03/03/06 10:17ID:0wTJZFjp<?php
print $_POST["name"]."は".$_POST["sex"];
?>
ちなみにGET方式の場合は同様に
$_GETの配列に代入される。
$_REQUESTにはGET,POST関係なく
代入されてくれる。(ただし、安全じゃないという理由で推奨はされない)
0173俺様
03/03/06 10:29ID:0wTJZFjp文字列関数を見るとわかるがかなり便利な関数が標準で用意されている。
htmlspecialchars
特殊文字をHTMLエンティティに変換する
例えば、<を'<'に変えてくれるのだ。
タグとみなされずにすむ。
trim
文字列の先頭および末尾にあるホワイトスペースを取り除く
これもフォーム処理の際にはあると便利だろう。
こんなふうにすればフォームから受け取った全ての値に
簡単に処理を適用できる。
$_POST = array_map("htmlspecialchars", $_POST);
$_POST = array_map("trim", $_POST);
0174俺様
03/03/06 10:30ID:0wTJZFjp0175nobodyさん
03/03/06 11:23ID:???本来はエラーにすべきだけど、gccだと通るんだよな・・・三項演算子が左辺になりうる。
まあ-ansi -pedanticをつければエラーにしてくれるけど。
0176175
03/03/06 11:28ID:???0177nobodyさん
03/03/06 15:41ID:???演算子の優先順位も、左辺値になるということも、
perlopにちゃんと書いてあるし。ちゃんとした仕様。
仕返しだ。
$a ? $b : $c = $d ? $e : $f = $g ? $h : $i = $j ? $k : $l = $m ? $n : $o;
0178俺様
03/03/06 16:42ID:SMJB497Bいや、いい加減な仕様ってのは今回に限ってはPHPに対していったのさ。
>>157で言ったようにPerlの場合は予想したとおりになったからね。
俺が言いたかったのはPHPの場合が>>161みたいになっているのが
いい加減だなあってことだ。
0179nobodyさん
03/03/06 17:01ID:???0180俺様
03/03/06 17:04ID:SMJB497B>優先度は、=の方が上
ソースキボンヌ。
俺が調べた結果だと=の方が下だった。
0181nobodyさん
03/03/06 17:05ID:G2YpYyeThttp://www.pink-angel.jp/betu/index.html
0182nobodyさん
03/03/06 17:06ID:???左辺値になるってのがおかしいんだよ(-_-;)
0184nobodyさん
03/03/06 21:36ID:???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
あぁ。最低から並べたものって書いてあった。うぅ。
0185nobodyさん
03/03/06 23:54ID:aj5F0raF配列@arrayに、'12-34','34-56'...みたいなデータが入ってて、-の右側でソートしたい場合、
@tmp = map { (split /-/)[1] } @array;
@array = @array[ sort { $tmp[$b] <=> $tmp[$a] } 0 .. $#tmp ];
でやってたんですが、同じことをPHPでやるにはどうしたらいいんでしょう?
0186俺様
03/03/07 00:46ID:86BQl/fj実はそれに似たようなので、俺様も苦労したんだな〜
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
俺様のと若干違うようなので、もっと簡単な方法があるかも知れんが
参考までに。
0187nobodyさん
03/03/07 00:46ID:???配列@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でやるにはどうしたらいいんでしょう?
0188nobodyさん
03/03/07 03:08ID:???0189nobodyさん
03/03/07 14:44ID:???Perlならこれでいいんじゃない?
@array = sort { (split(/-/,$a))[1] <=> (split(/-/,$b))[1] } @array
0190nobodyさん
03/03/07 16:22ID:???$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初心者スレで書いた奴を改善してみた。
0191nobodyさん
03/03/07 18:15ID:???ソートの度になにかの処理をするって遅くならん?
0192$n日後
03/03/07 18:53ID:???($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime(time + $n*24*3600);
PHPだとどうなるんだ?
あのツェラーの公式だっけか?
0194nobodyさん
03/03/07 19:23ID:???$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);
まぁ別に変数を使う必要も無いわけだが。
0195$n日後
03/03/08 13:58ID:NNyx9+/Yレスサンク!
ツェラーの公式とはまた違うか、・・・・。
PHPではツェラーの公式なんか使わなくても簡単に指定した日の
曜日とかも算出出来ちゃうんだね。
--抜粋--
また、カレンダー等でその日の曜日を知りたい時、「perl」では
Zeller(ツェラー)の公式を使って算出しなければいけませんが、
「php」では「string date (w , [timestamp])」とすると、
「timestamp」で指定した日にちの曜日を数字で返してくれます
(0(日曜)〜6(土曜))。極端な例を2点ほどあげましたが、
他にも便利な関数が数々あります。
--抜粋--
ttp://bin5.info/useful/php/php_02.html
0198nobodyさん
03/03/08 14:32ID:???>>194の回答はアホ過ぎ。timeの戻り値がシリアル値なんだから、
その性質を使わないのは勿体無い。
0201nobodyさん
03/03/08 15:37ID:???でいいかな?
うるう秒をちゃんと考えるなら、>>194の方法で・・。
0202nobodyさん
03/03/08 15:53ID:???0205nobodyさん
03/03/10 16:59ID:???0206&rlo;ega待期&lro;
03/03/10 17:03ID:EpMeREtC0207nobodyさん
03/03/10 17:11ID:???0208俺様
03/03/10 17:47ID:SvAZl1u/以上の知識でもうどんな物でも
Perl→PHPの移行はできるはずだ。
練習として誰かYomiサーチを移植してみよう。
0210nobodyさん
03/03/10 20:36ID:???Yomiサーチの移植の続きやれよ。(w
0212nobodyさん
03/03/10 21:09ID:???0213俺様
03/03/10 22:09ID:SvAZl1u/というか俺が今その勉強中だから
まあ(・∀・)つ目 オチャデモノンデマテ!
0215俺様
03/03/10 22:26ID:KPB0lsuM(´Д⊂
0216nobodyさん
03/03/10 22:32ID:Hr2fHuuO川o・-・)ノ <先生!こんなのがありました!
__/ / /
\(_ノ ̄ ̄ ̄\
||ヽ|| ̄ ̄ ̄ ̄||
...|| ̄ ̄ ̄ ̄||
http://saitama.gasuki.com/saitama/
0217nobodyさん
03/03/10 23:02ID:c9OmtJD20221俺様
03/03/10 23:17ID:KPB0lsuM0224nobodyさん
03/03/11 10:00ID:???俺が Perl → PHP で一番悩んでるのが php.ini (により定まる動作環境?) なんだよね。
こっちのサーバでは動くのにあっちのサーバでは動かない、とかとか。
0227nobodyさん
03/03/11 10:31ID:???問題解決のためならその通りですが、
予備知識が無いと、聞きようが無い and 読みようが無いと思ったのさ。
詳しくは本でも買って読め、ということになるのかもしれないけど、
Perlユーザ向けの *入門編レベル* で十分なので、
抑えておくべきポイントを教えてくれると嬉すぃ。
0229nobodyさん
03/03/11 10:42ID:???<?php
phpinfo();
?>
だけ書いたファイルを置く、これはやってます。
ただ、
> 後は値でどういう設定かは見当が付く。
これがね…。
要点だけで良いので、時間余ったらよろしく。>>俺様
0230俺様
03/03/11 11:10ID:+7fowk1S>こっちのサーバでは動くのにあっちのサーバでは動かない
これで困っているなら、なぜ動かないのかを検討する方が先だろうし。
まあ、php.ini自体に英語で最初から説明が書いてあるので
それを見ながら幾つか拾ってみよう。
0231俺様
03/03/11 11:17ID:+7fowk1S; Safe Mode
safe_mode = Off(デフォルト時)
セーフモードとは何か?についてはマニュアルに結構書いてある。
http://www.php.net/manual/ja/features.safe-mode.php
http://www.php.net/manual/ja/features.safe-mode.functions.php
見ればわかるとおり、Onにすると使えなくなる関数とかがいくつか出てくるが
共用鯖ではOnにしている所がかなり多いので
On上での動作確認をした方がいいだろう。
0233俺様
03/03/11 11:23ID:+7fowk1Shttp://www.net-newbie.com/postgres/php.ini-recommended.txt
PHPにはphp.ini-recommendedという推奨設定ファイルが付いている。
上はその日本語訳のようだ。
0234俺様
03/03/11 11:28ID:+7fowk1Sまあ、重要な部分だけあといくつか。
あとはその日本語訳をよんでクレイってことで。
これも確かめたほうがいいな。
register_globals = Off
Onにすると変数がグローバル変数となってしまう(だったっけ?)
俺はOnにしたことないからよく知らんが。
4.1.0以降でデフォルトがOnからOffに変わったので注意すべき。
Onのサイトのみで動いていたものをOffのサイトで動かすには
結構スクリプトの書き換えが必要。
0235俺様死ね
03/03/11 11:31ID:???違うぞ。
フォームからの情報がそのまま変数として展開されるか、$_GET $_POSTなどの連想配列?の要素として格納されるかの違いだ。
0236俺様
03/03/11 11:37ID:+7fowk1S;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自体を自分のディレクトリに
アップロードしないとならないかも。
0237俺様
03/03/11 11:47ID:+7fowk1Sフォローサンクス。
あと、
; cgi.force_redirect = 1
はこのように変えたほうがいい。
cgi.force_redirect = 0
ただ、PHP4.3.0はこの挙動がおかしくなるバグがあるらしいので注意。
0239俺様
03/03/11 11:51ID:+7fowk1Sextension_dir = ""
きちんとextensionsディレクトリをさすようにしておこう。
extension_dir = "C:/php/extensions"
02412
03/03/11 11:56ID:138sEgV0がんがれ。
0242俺様
03/03/11 12:03ID:+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()読めば大体わかるでしょう。
0243俺様
03/03/11 12:05ID:+7fowk1S後は上の日本語訳や
マニュアルにもけっこう説明がしてあるはずだから
それを読んでクレイ。
0244nobodyさん
03/03/11 12:32ID:???php3 -> php4で一番困るのが
register_globals
で、Sourceを手っ取りばやく移植するにはSourceの先頭で
$hoge = $_POST["hoge"];
ってな感じにする。
0247nobodyさん
03/03/11 13:09ID:???0248俺様
03/03/11 13:21ID:Aj/riikG>■修正の仕方
>以前のスクリプトを、PHP4.1.0以降に対応させるには、
>以下の文を、最初の<?以降に挿入すると、暫定的に動作するかと思われます。
>extract($_GET);
>extract($_POST);
>extract($_COOKIE);
>extract($_SERVER);
>extract($_SESSION);←セッションを使う場合
>未確認なので動作は保証しません。extractは配列を変数に展開するための関数です($_GET[f]=2002なら$fに2002が入る)
0249nobodyさん
03/03/12 22:56ID:???・Perl/CGIと比較して処理速度の高速化
・サーバー負荷の低減
これらのメリットは無くなるということですか?
0251俺様
03/03/13 11:51ID:???PostgreでもMyでも使えるようにPearを用います。
対応DB
Interbase
Mini-SQL
Microsoft SQL Server
MySQL
Oracle 8 (OCI)
ODBC
PostgreSQL
Sybase
0252俺様
03/03/13 11:59ID:???この3つを参照。
>>236
>>239
>>242
>>239、>>242はMySQLのみの場合は要らないかな。
例えばPostgreSQLを使いたければ
;extension=php_pgsql.dll
を
extension=php_pgsql.dll
ってする必要がある。
0253俺様
03/03/13 12:09ID:???http://www.mysql.com/downloads/
ここからバージョンを選んで(勇気ない俺は4ではなく3.23)
Windows downloadsってのを落とす。
で、seteupを実行してnext連打でOK(一応要確認)。
インストールしたらc\:windows辺りにmy.iniってファイルが出来ていると思うので
それを開いてこれを追加。
[mysqld]
default-character-set=sjis
以上で完了だ。
PostgreSQLはcygwinを入れたりアカウント作ったりと面倒なので各自で調べてくれ。
何とかインストールできたけど数時間掛かった(汗
0254俺様
03/03/13 12:11ID:???一度実行してユーザー名とパスを決めるように。
外部に公開しない場合はキャンセルでも良いでしょう。
0255俺様
03/03/13 12:17ID:???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>
こんなふうになったら成功だ。
0256俺様
03/03/13 12:24ID:???http://pear.php.net/manual/ja/
調べたところによるとWindows用PHP4.3以降では
標準で付かなくなってしまったらしいので
上を参考に落としておきましょう。
0257俺様
03/03/13 12:25ID:???最初からPearも使用できます。
0258俺様
03/03/13 12:30ID:???これ見れば俺様の説明なんぞ用なしかも。
http://tsuttayo.sytes.net/mysql/index.html
これ見てphpMyAdminとかも入れておくと良い。
ブラウザからアクセスできるのでレンタル鯖などでも手軽に使えるのが特徴。
0259山崎渉
03/03/13 17:01ID:???0260nobodyさん
03/03/15 21:28ID:???0261nobodyさん
03/03/15 22:18ID:???最初、エラーが出て焦りました。
mysqladminいいかも。
0262nobodyさん
03/03/19 23:10ID:???0264nobodyさん
03/03/20 01:11ID:???なんかのコピペジェネレータを作るとか。
てかフォームを表示して受け取ってとかやってるとすんげー
HTMLとPHPのコードが入り乱れて汚くなっちゃうんだけど、どうすりゃいいの?
0265nobodyさん
03/03/20 15:43ID:???<?
//極手抜き
$hoge = $_POST["hoge"];
?>
<HTML>
<H1><? print $hoge; ?></H1>
</HTML>
とか。
0266nobodyさん
03/03/20 16:41ID:???0267nobodyさん
03/03/20 16:59ID:???0268nobodyさん
03/03/20 19:10ID:???0269nobodyさん
03/03/20 19:39ID:???の@はperlの何に相当するんですか?単にfopenじゃイクナイの?
0270nobodyさん
03/03/20 20:28ID:???@をつけると、エラー出力を抑止する。
つけなくてもいいけど、その場合はfopenに失敗したときにエラーがブラウザに返される。
0271nobodyさん
03/03/20 21:50ID:???ありがd。
それじゃ代わりにperlみたいに
$fh = fopen($file,"w") or die("しぼんぬ");
ってやってもイイのかな。
0272nobodyさん
03/03/20 22:09ID:???いやだからそーすると、しぼんぬの前にエラーメッセージが出てしまう。
$fh = @foepn($file, "w");
if(!$fh){
die("しぼんぬ");
}
0276nobodyさん
03/03/25 14:18ID:CVcoKJbJ$a = $b || $c;
perl では、$b が false の場合は $c が $a に代入される。
php の場合は、 $a には $b || $c の bool値(0 or 1)が入る。
0278nobodyさん
03/03/26 06:38ID:l1CVp/e0ところがあるだろうけど、自分で使えるように拡張できるの
ですか?
例えばPerlでいえば、モジュールを自分のディレクトリに入れ
ておけばいいけど、そーゆーことはPHPでできますか?
0279nobodyさん
03/03/26 09:07ID:???ホントだ。
$foo ||= 'bar'; とか…は流石に無理かな。
ちなみに、python でも or を使って同様のことが出来ました。
>>278
出来るよ。ただし、共有のサーバーにインストールする場合は、
いままで自分のHOMEのライブラリを読んでいたのが、
ISPがPEARをインストールして突然ライブラリのバージョンが変わったりとか
…ありそうな話なので気をつけて。
0280nobodyさん
03/03/27 05:59ID:p+/0Vcbyできるのですか。
PHPは、PHP.INIにいろいろな基本設定を書いたりするようなので、
通常ISPでCGIやると、それを編集するのは許されないだろうから
無理だとおもっていました。
PHP.INI に記述された設定は、スクリプト内で変更できるのですか?
0281nobodyさん
03/03/27 08:34ID:illH7cXTini_set -- 設定オプションの値を設定する
string ini_set ( string varname, string newvalue)
だけど、全ての設定が変更可能ではなく、pathの設定とかは確か無理だったかな。
include_pathの設定は、カレント・ディレクトリに
<?php require_once '/full/path/of/PEAR.php'; ?>
とか、リンクを PEAR.phpと言う名前で置くことで対応。
0282nobodyさん
03/03/27 10:50ID:???$ perl -wcT hoge.pl
に相当する PHP の簡単な文法チェック方法って無い?
0283nobodyさん
03/03/27 11:08ID:???例えば名前とトリップを分離する場合、Perl なら
if ($FROM =~ /(.*)(\#\S+)/) {
$name = $1;
$trip = $2;
}
と、$1, $2 使って楽できるんだけど、
PHP で↑の $1, $2 みたいなモノに相当するのって何ですか?
0285nobodyさん
03/03/27 11:21ID:???あー例が悪かったですね。丁度身近にあったので出しちゃいました。
要はマッチした部分を簡単に再利用できないか?という質問です。
つまり、Perl の $1, $2 に相当するモノって何だろう、ということです。
0286nobodyさん
03/03/27 11:25ID:???0287nobodyさん
03/03/27 12:02ID:???\\1, \\2 ってどう使うのでしょう?
マッチングの後に、print \\1; とかやったらエラーになりました…。
再度、google 様に問い合わせたら、
if (ereg("(.*)(\#[^ \t\n\r\f]+)", $FROM, $regs)) {
$name = $regs[1];
$trip = $regs[2];
}
でいいみたいですね。調査が甘くてすみません。
0288nobodyさん
03/03/27 12:52ID:???\\1, \\2 は
$url = ereg_replace("(http://ime.nu/)(.*)", "http://\\2", $url);
こうでしたか。
レスありがとうございました。>>286
0289nobodyさん
03/03/27 14:34ID:???勝手にエスケープされるなんて、まるで想像もつかなかった。
Perl → PHP への道、俺にとってはかなり遠い。でもガンガルsage
ところで tr/ab/cd/ って PHP ではどーやんの?
0292nobodyさん
03/03/28 04:03ID:???C/C++とPerlとVBとPascalとASM位しか知らなかったのだが、
よーやくPHPに手が伸びそうでつ。
0293nobodyさん
03/03/28 06:56ID:NA3CJ6rA教えていただき、ありがとう。
システム側で設定したPHP動作設定値を変えられないとなると、
ISPで利用する場合、大きな壁になりそうですね。
例えばアップロードファイルのサイズは2Mまでだから、それを超え
るものをアップさせる仕様に対応できない。
PHPでWebアプリ組んでも、いつかはユーザ要件に対応できずに全部
Perl等に書き直す時が来るかも、ということでしょうか?
0294nobodyさん
03/03/28 08:06ID:56FSUIhD>>293
WEB用途にPHPを使うなら、.htaccessでphp.iniの設定を上書きする方法があります。
アップロードサイズの制限を変更するには、
upload_max_filesize と post_max_size の値を上げることで対応出来るかな。
PEAR のインストールは、多分 include_path に PEAR のpathを追加するだけでOKだと思う。
0295nobodyさん
03/03/28 18:00ID:56FSUIhDPerl と PHP では、演算子の優先順位に結構違いがあるので
一度目を通しておこう。
$r =
($foo < $bar) ? "LESS" :
($foo > $bar) ? "GREATER" :
"EQUAL";
0296nobodyさん
03/03/28 18:49ID:56FSUIhDphp -l script.php
-w は、error_reporting(E_ALL); に相当?(かな?)
Taint モードについては、私も前に探したことあるけどPHPには見つけられなかった。
汚染チェックは、自主的にそういう習慣を身につけるしかないのかな。
0297nobodyさん
03/03/28 19:00ID:???Perlでいう↑みたいなことはPHPではどうやればできますか?
0299nobodyさん
03/03/28 20:35ID:/IEo7+Sn∧_∧ _ _ .' , .. . ∧_∧
( ´_ゝ`) _ .- ― .= ̄  ̄`:, .∴ ' ( >>297)
/ '' ̄ __――=', ・,‘ r⌒> _/ /
/ /\ / ̄\-―  ̄ ̄  ̄"'" . ’ | y'⌒ ⌒i
_| ̄ ̄ \ / ヽ \_ | / ノ |
\ ̄ ̄ ̄ ̄ ̄ ̄ \__) , ー' /´ヾ_ノ
||\ \ / , ノ
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ / / /
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| / / ,'
|| || || / /| |
!、_/ / 〉
|_/
0300nobodyさん
03/03/29 13:38ID:CQcFf7wk回答ありがとう。
0301nobodyさん
03/03/29 18:28ID:???とか、
@hash{@list} = (1) x @list;
Perlでいう↑みたいなことはPHPではどうやればできますか?
0302phpformperl
03/03/29 20:26ID:kc16+nklやっぱxoopsでっか?
0303nobodyさん
03/03/29 22:26ID:???XOOPSを積極的に弄っている身としては残念なことだが、
決してきれいなコードではないし、流れを追うのも面倒。
過去のしがらみとかあるので大きく変えられないことや、
複数人で作っているが、細かい部分で明確な規定がある訳ではないので
コア、標準モジュール、果ては標準外の勝手モジュールまで入れると
コードの統一はされていないと思っていい。
フレームワークとしては非常に緩いのでモジュールのコードまで
含めるのは本来フェアではないのだが。
あとJpGraphもコードはちょっとね。便利に使わしてもらってますけど。
0304phpfromperl
03/03/30 13:14ID:fNA6Ajxwサンクス
とりあえず手本にさせてもらいます。
いろいろ仕掛けをつけやすそうだし。
ほかよりましなようなので。
0305nobodyさん
03/03/30 21:07ID:???my $num = 0;
return sub {
$num += shift if @_ == 1;
return $num;
}
}
Perlでいう↑みたいなことはPHPではどうやればできますか?
0306nobodyさん
03/03/31 00:21ID:???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; }
}
0307nobodyさん
03/03/31 00:21ID:D273gBu9現行のバージョンのPHPでは、すべてpublicメンバになるので、
$numへ直接アクセスすることが可能。(Perlのオブジェクトでも同様だよね)
現状(PHP4)では、完全に隠蔽することは出来ない。…はず。(PHP暦浅いので自信なし。フォロー求)
# http://www.php.net/ZEND_CHANGES.txt を読んだところ、
# zend2 engine/PHP5? では private が使えるらしい。
0308名無しさん@Emacs
03/03/31 17:22ID:mhlggPCnなんでしょうか?
0309nobodyさん
03/03/31 18:46ID:???0310nobodyさん
03/04/01 02:03ID:???php.net/関数名
pear.php.net/モジュール名
0311nobodyさん
03/04/01 18:35ID:???0312nobodyさん
03/04/01 19:21ID:???訂正 s/イ/言/
0313nobodyさん <>
03/04/01 20:18ID:iGZ3zwAcローカルには作れんもんでしょうか?
ADSL でも結果が出るまでの "待ち" が気になるの。
0314生徒1
03/04/01 23:58ID:2arYjAuZ($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;
}
こんなのはどうやってますか?
0316nobodyさん
03/04/03 16:31ID:???右か左を返すんだよ
0317nobodyさん
03/04/08 14:23ID:???print "-" x 10;
みたいな
0318nobodyさん
03/04/08 15:41ID:???0319nobodyさん
03/04/08 22:26ID:???PHP にあって perl にないもの。
…って何かないかな?
0320nobodyさん
03/04/11 00:44ID:fBEofA1cただPerlと違い,初心者向けの本がPHPにないところが痛いでつが。
0321nobodyさん
03/04/11 00:47ID:???0322nobodyさん
03/04/11 03:50ID:???0323nobodyさん
03/04/12 05:30ID:sfZex8vW私も年寄りですが、Perl、PHPを使ってメシ食ってます。
まったくの初心者が始めるならPHPですね。
HTTPプロトコルをあまり意識する必要がないから、
ブラウザに文字を表示させるのは簡単です。
そのコードも単純明快に理解できます。
一方Perlは、ブラウザに文字を表示させるためには
表示する処理の前に、何行かのおまじないを書かな
ければいけません。
そのおまじないを理解しようとすると、初心者では到底
理解できないので「難しい」ということになるかもしれません。
PHPの本は初心者用がたくさん売られていますよ。
大丈夫です。
0324nobodyさん
03/04/12 06:02ID:???Perl->PHPは入りやすいらしいけど逆は結構厳しい。
ちなみに、私は後者です…。
0325320
03/04/12 22:12ID:3Lo6GhrcThanksです。
PHPだと入門書でいきなりECサイトまで行ってしまうのですが,
(チャット作成までなんとかついていっている程度)
Perlだと入門書で息切れするような。。。(とてもECサイトまでナンテ
行きませんよね?)
ただ,やはりデザなので自分一人でECサイトまではやりません。
外に頼むまでもない事を自分でやれるようにするという感じです。
(極めるという表現が不適切でした。)
データバのソートとか,Webの自動更新とか。
そのあたりでPerlとPHPはどうかな?と思ったわけです。
0326nobodyさん
03/04/13 00:12ID:???これをPHPで表現するとどうなるんですか?
0330nobodyさん
03/04/13 01:12ID:???0331nobodyさん
03/04/13 03:24ID:Ba9KZRzY0333nobodyさん
03/04/14 01:24ID:???僕PHPはじめて1週間だけど配列はだいたい分かったので
配列ですが僕はすぐ理解できたので
331さんの厄介とこが分かれば教えてあげますよ
0336nobodyさん
03/04/14 02:16ID:???禿デゥ
0338nobodyさん
03/04/15 16:55ID:JlWa+G1C0339nobodyさん
03/04/15 18:07ID:???いちいちarray_*系の関数を使わないといけないのも面倒らしい。
0340nobodyさん
03/04/15 19:26ID:1VLAH3ROphpは名前空間を定義できない。
0341山崎渉
03/04/17 12:01ID:???0342山崎渉
03/04/18 15:30ID:???0343山崎渉
03/04/20 06:02ID:???( ^^ )< ぬるぽ(^^)
0344?
03/04/27 10:50ID:7vWz7FBG0345nobodyさん
03/04/27 10:56ID:???0346nobodyさん
03/04/27 11:36ID:aZMHQklXhttp://zoetakami.fc2web.com/
0347( ´Д`)/< 先生!!こんなのが有りますた。
03/04/27 12:27ID:???http://yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku08.html
http://yamazaki.90.kg/hankaku/hankaku10.html
http://www.yamazaki.90.kg/hankaku/hankaku01.html
http://yamazaki.90.kg/hankaku/hankaku03.html
http://www.yamazaki.90.kg/hankaku/hankaku02.html
http://yamazaki.90.kg/hankaku/hankaku09.html
http://www.yamazaki.90.kg/hankaku/hankaku06.html
http://yamazaki.90.kg/hankaku/hankaku04.html
http://www.yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku05.htm
0348bloom
03/04/27 12:29ID:3nPIuagT0349ワッショイ
03/04/27 17:54ID:???もうひとふんばりっ!
0350nobodyさん
03/04/28 22:57ID:3GKx/vUL0351nobodyさん
03/05/05 22:17ID:LIOD5Ueh0352nobodyさん
03/05/05 22:25ID:???0353nobodyさん
03/05/19 23:33ID:cX3VPQ/6perlで言うところのwarnなんですが、
print error_log($test);
見たいな形でerrorログに$testの値を出そうと思ったのですがうまくいきませんでした。。
どなたかperlでいうところのwarn関数のPHP版を教えてください。
0355あぼーん
NGNG0356nobodyさん
03/05/20 02:27ID:???0357nobodyさん
03/05/20 07:45ID:???インターネット全体からどれだけの犯罪者を出しているんだろうね…
2chから情報を得ておきながら悪口言う人間もいることだし
放置しても平気でしょ
0358nobodyさん
03/05/20 10:19ID:???殺人とかの罪犯す奴いるじゃないか
そしたら外国人は
日本人はみんな犯罪者だと思うのか?
0359山崎渉
03/05/22 01:59ID:???0360nobodyさん
03/05/22 12:59ID:???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にしたいのですが…だれかお願いします!
0362nobodyさん
03/05/25 01:54ID:YbAXJXvg値中の「"」と「'」がエスケープされてしまって、「\」がついています。
これは自分で取り除くしかないのでしょうか?
0365362
03/05/25 02:32ID:???ローカルで出来なかったので、レンタル鯖にスクリプト設置して実験したら
やっぱり同じ現象がおこりました。・゚・(ノД`)・゚・。
自分で取り除いてみます…お騒がせしました
0367山崎渉
03/05/28 17:06ID:???ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。
=〔~∪ ̄ ̄〕
= ◎――◎ 山崎渉
0368あ
03/05/30 22:54ID:Ey+u4zPhprint <<<EOF
<タグ>$a<タグ2>
EOF;
の<タグ2>が表示されないのって、どうすりゃいいの???
0369イ奄様
03/06/02 11:34ID:EOTygtgqprint <<<EOF
<タグ>${a}<タグ2>
EOF;
0370あ
03/06/02 23:18ID:9zPzvWqa0371nobodyさん
03/06/04 00:53ID:1Jdo0O1g0372nobodyさん
03/06/04 01:12ID:wjzhyKBb・_・y━””
0373age
03/06/08 17:42ID:cXeOp+rQ0374_
03/06/08 17:44ID:???0375
03/06/08 18:09ID:eRunpr9i489 名前: 文責:名無しさん 投稿日: 2001/04/11(水) 17:25
一般人なのに盗聴される、じゃなくて、「一般人だから盗聴される」んじゃないのかな?
基本的にネタ集めのためにやってんなら、有名人のネタを盗むと、有名人は告発できるし、
そんなことされても当たり前だと思われるので告発しても信じてもらえる。
そうでない人は、ここの途中の書き込みにもあったように「電波」扱いされるだけ。
ただで、ネタを仕入れるんなら、一般人に限るでしょう。
マスコミは自分らの無能さを恥じてほしいです。
ちなみに私が盗聴されはじめたのは、芸能人にストーカーされ始めてからでした。
そこからマスコミに広がって行った。
だから余計「妄想」とか思われそう。
友人に話したら完全に病気扱いされた。ストーカーって言葉がない時代だったしね。
書いておいておいた小説のネタが、他人の原作でドラマ化されたときにはきれまくっ
たなあ。(一度や二度のことじゃないけど)
0376age
03/06/13 23:55ID:nW6iX8p90377nobodyさん
03/06/14 01:09ID:Zt1p4X90http://www.php.net/manual/ja/function.mb-convert-kana.php
0378無料動画直リン
03/06/14 01:10ID:K+P5CDjB0379nobodyさん
03/06/15 21:40ID:???http://jp.php.net/manual/ja/function.stripslashes.php
これじゃだめかい?
0380nobodyさん
03/06/19 03:00ID:yyOItGJy0381nobodyさん
03/06/19 19:42ID:???何か方法ありますか?perlでいうとこの
HTML::Template みたいなのとか。
0382nobodyさん
03/06/20 00:47ID:???【PHP】Smarty【Template】
http://pc2.2ch.net/test/read.cgi/php/1047225437/
0384nobodyさん
03/07/03 21:53ID:???変数の定義がされているかどうかの
チェックはどうやったらいいですか?
0385384
03/07/05 12:49ID:???0386nobodyさん
03/07/05 13:00ID:???もうだめぽ ..
0387nobodyさん
03/07/05 13:14ID:???0388山崎 渉
03/07/15 11:11ID:???__∧_∧_
|( ^^ )| <寝るぽ(^^)
|\⌒⌒⌒\
\ |⌒⌒⌒~| 山崎渉
~ ̄ ̄ ̄ ̄
0389nobodyさん
03/07/23 10:22ID:A887jOLIPerlっぽく遠回りに書いてしまうことってないですか?
逆も然り
そーゆー注意点とか教えて下さい。
0390nobodyさん
03/07/23 13:26ID:???他の言語に興味を持つといいと思います。
0391nobodyさん
03/07/24 01:46ID:???このスレ見たらやる気なくした。やっぱC/C++にするわ。
まず第一に<?〜?>にコード書くなんて本当にキモいよ。
(JSPやASPも同じようなもんだがな)
PHPってCGI/Perlの速度に我慢できなくなった奴が、C/C++はできないから
しょうがなく使ってるんだろ?
プロはJavaとかASP使うし、素人はPerlで十分(環境も整ってる)。
速度ががまんならないならC/C++、もしくはモジュール資産を活かして
mod-perlだな。
PHPの選択はまずありえないね。
0392nobodyさん
03/07/24 10:31ID:???とりあえず海外見てきたら?
0393nobodyさん
03/07/25 12:40ID:???0394_
03/07/25 13:14ID:???0395nobodyさん
03/07/25 13:21ID:???●無料でパソコンだけで月に10万円↑稼げます!
登録完全無料!お小遣いが沢山稼げちゃいます。
月に平均10万円ほど稼げます。頑張ればもっと!
夏休みを有効に利用しましょう!
無料だから登録しないと損します〜。
0397nobodyさん
03/07/25 14:02ID:???0399nobodyさん
03/07/26 02:18ID:???配列で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 );
0400nobodyさん
03/07/26 02:50ID:???CRが付くって事は環境はWindows?
perlでいうbinmode($fp)ていう関数ないかね?
http://flex.ee.uec.ac.jp/texi/perl/perl_76.html#IDX157
0401nobodyさん
03/07/26 03:36ID:???バイナリモードで開く"wb"(WINのみ)
$fp = fopen( "hoge.dat" , "wb" );
とすると一応解決しますね。サンクスです。
根本的な解決になってるのかどうか微妙っす。
0402nobodyさん
03/07/26 04:30ID:???テキストモードで開くと
fputs などの出力処理中に \n が見つかった際に
内部で \r\n に置き換えるという小さな親切を行ってくれます
バイナリモードならそれをやらないので解決だと思われまする
0403402
03/07/26 04:33ID:???まあいいや。たぶん大丈夫。
0404nobodyさん
03/07/26 16:31ID:???なるほそ。小さな親切ですね・・・
0405nobodyさん
03/07/28 20:34ID:MPvwsvteprint "Location:./santa.cgi?$no\n\n";
exit;
などとしていましたが、phpでこれと同等なのはどういうコマンドでしょうか?
コマンド名だけでも良いので助言お願いします。
0407nobodyさん
03/07/29 00:10ID:???でどうでしょう。
0408nobodyさん
03/07/29 00:53ID:???0409nobodyさん
03/07/29 01:11ID:???相対だと不都合でるブラウザってあるの?
0410nobodyさん
03/07/29 01:19ID:???携帯とか。
0411nobodyさん
03/07/29 01:59ID:???0412_
03/07/29 02:02ID:???0415nobodyさん
03/07/31 09:22ID:???× ./index.html
ってのが前あった。
0416山崎 渉
03/08/02 02:23ID:???( ^^ )< ぬるぽ(^^)
0417ぼるじょあ ◆ySd1dMH5Gk
03/08/02 04:51ID:???ピュ.ー ( ・3・) ( ^^ ) <これからも僕たちを応援して下さいね(^^)。
=〔~∪ ̄ ̄ ̄∪ ̄ ̄〕
= ◎――――――◎ 山崎渉&ぼるじょあ
0418nobodyさん
03/08/03 03:36ID:e6CW3yAEあげとく
0419nobodyさん
03/08/15 21:51ID:/UWm9DVh0420山崎 渉
03/08/15 22:25ID:???│ ^ ^ │<これからも僕を応援して下さいね(^^)。
⊂| |つ
(_)(_) 山崎パン
0421nobodyさん
03/08/28 08:28ID:aKTRoIJTPerl
use lib './lib/';
use Hoge;
PHP
define( 'LIB_DIR', './lib/' );
include( LIB_DIR . 'Hoge.class.php' );
とやってるんだけど、もうちっと短く書きたいなぁ。
0422nobodyさん
03/08/30 22:41ID:AS3I0NRvPerlでいうところのプログラミングPerlみたいな
大御所のこれさえ買っとけばたいてい載ってるって本きぼん。
0423nobodyさん
03/08/30 23:14ID:AIvW/87l大人の時間ドットNET
http://2ch.otona-no-jikan.net
0424nobodyさん
03/08/31 13:22ID:AiCjBA+L赤マンモス
0425nobodyさん
03/09/07 01:36ID:???プログラム中にHTML書いてあったら落ち着かない
0426nobodyさん
03/09/07 01:56ID:1pDZ49hH0427nobodyさん
03/09/10 00:04ID:EKqTJkq7perlで検索で、$find_lineの中に、$f_a_wordが含まれているかを
if (index($find_line,$f_a_word) >= 0) {
含まれている
} else {
含まれていない
}
このようにしていたのですが、phpだとどのようになりますか?
0428427
03/09/10 00:42ID:???失礼しました。
0429nobodyさん
03/09/10 01:08ID:???これじゃだめかな?
やってみてくりくり
<?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は含まれていません!';
}
?>
0430429です
03/09/10 01:20ID:z4dT6uSf427-428宛のレスです。
OpenJaneって番号ズレるのね。。。
0432nobodyさん
03/09/10 10:21ID:???0433nobodyさん
03/09/11 23:16ID:???> PHPでOOPでもと思い、
インクルードパスの設定とOOPには何の関係もない。
‥‥‥というのはともかく、auto_prepend でググれ。
0434nobodyさん
03/09/20 14:31ID:???おかげで分からなかった事も分かりました。ありがd
0435nobodyさん
03/09/20 22:34ID:VeIFc9WRただし、.や..や.htaccessといった、「.」で始まるファイルは対象外にしたいのです。
Perlで
---
opendir(DIR, $path);
@list = sort grep(!/^?./, readdir(DIR));
closedir(DIR);
と書くところを、phpではどのように表現すればよいのでしょうか?
0437とおりすがり
03/09/21 03:57ID:???自信ないが
$dh = opendir($path);
while ($tmp = readdir($dh)) $filename[] = $tmp;
$filename = preg_grep("/^[^\.]/", $filename);
sort($filename);
closedir($dh);
0438nobodyさん
03/09/21 19:51ID:???0439nobodyさん
03/09/22 04:27ID:PmE0lLf0なるほど。このコード実行してないんであれですが、
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
正規表現が分からない時はこんなのもアリかな。
while ( $entry = readdir($dh ) {
if ( substr($entry, 0, 1) != '.' )
$files[] = $entry;
}
http://jp.php.net/substr
0442nobodyさん
03/09/22 11:22ID:???0443nobodyさん
03/09/22 16:10ID:???0445nobodyさん
03/09/25 23:55ID:???perlの場合のflock関数と比較して、
phpのflock関数を使うときの注意点って、特になんか、ありますか?
(ウェブサーバは、Apacheという前提です)
0446445
03/09/28 00:48ID:lxnHIT500447nobodyさん
03/09/28 02:01ID:???0448nobodyさん
03/09/28 02:26ID:???にたようなもんじゃないのかな?
たしか、PHPマニュアルにもflock関数は全ての環境で使えるもんじゃ
ないみたいなこと書いてあったし、
ネットワークファイルシステムに対応してないけりゃ、無理だろうし。
ちなみに、うぇぶさばは関係ないですぞ。
0449445
03/09/28 03:46ID:???ども。のぞいてきます。
>>448
そうですね。
よく考えりゃ、どっちもOSのflockを呼び出してるってことだから、
特段変わることはないか。。。
>ちなみに、うぇぶさばは関係ないですぞ。
いや、マニュアル
http://www.php.net/manual/ja/function.flock.php
に、
「いくつかのオーペレーティングシステムでflock() はプロセスレベルで実装されています。
ISAPIのようなマルチスレッド 型のサーバーAPIを使用している場合、
同じサーバーインスタンスの並 列スレッドで実行されている他のPHPスクリプトに対してファイルを保 護する際に
flock()を使用することはできません」
って書いてあったから、
ウェブサーバにIIS使ってると、事情が違うのかなと思って一応かいといたもんで。。。
(正直IIS分からんですが)
0450nobodyさん
03/09/28 09:23ID:???0451445
03/09/28 22:34ID:jyRnC+Ifあれ、なんかとぼけたこと自分言ってました?
ご指摘きぼんぬ
0452nobodyさん
03/09/29 10:34ID:???あまり気にする事は無いかと
マルチスレッド型を利用している場合、別々に動作している
phpは同一プロセス(の、別スレッド)で動作している事になるので
プロセス単位で排他をかけるflock()は排他の目的には使えない
ということで、HTTPdとphpの組み合わせによる、というのは正しいかも
0453nobodyさん
03/10/07 22:48ID:???0454nobodyさん
03/10/07 23:44ID:???みたいなマルチバイト文字列の置換をPHPでやるにはどうしたらいいんでしょうか。
mb_ereg_replaceはまだ実験段階らしいのであまり乗り気ではなく。
0455nobodyさん
03/10/08 00:11ID:???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を
ちゃんと設定していないと駄目。
0456454
03/10/08 00:30ID:???詳細なレスありがとうございます。
試しにpreg_replaceを使った時えらく文字化けしたのでなんでだろと疑問だったんですがこれで解決しました。
一応マルチバイト文字列関数用にphp.iniの設定は書き変えてあるので、
mb_ereg_replaceを使っても将来的に問題ないということならこれでいこうかなと思います。
0457nobodyさん
03/10/18 23:15ID:???他にも$a,$b,@c,$d,…と並べて@cの内容が展開されるようにしたい時とか.
0458nobodyさん
03/10/27 17:51ID:???http://www.din.or.jp/~ohzaki/perl.htm
をPHPにコーディングしなおしたサイトを誰かしりません?
無いかなー。
0459nobodyさん
03/10/28 18:22ID:???$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()で正規表現が使えないようなのですが
何か良い方法はないですか。
0460nobodyさん
03/10/29 23:14ID:dIX7j6Caphpでそういうモジュールってないでしょうか?
(いやぁ、ほんとはDB使いたいんですけどね。。。わけあってつかえず)
0461nobodyさん
03/11/01 14:03ID:5TPcc+Om0462nobodyさん
03/11/01 14:49ID:???泥臭いけど・・
$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でいけるよね
0463nobodyさん
03/11/03 00:41ID:4CVQMxAyprint qq|
$hoge
<hr>
<a href="http://www.yahoo.com"></a>
|;
みたいの、phpでないでしょうか?
要は、変数展開もされて、”もエスケープする必要がないように書きたいのですが・・・
0464nobodyさん
03/11/03 00:44ID:???なんか無駄がないか?
0466nobodyさん
03/11/07 15:11ID:GoKF/NURswitch($a) {
case "1" : global $b = "one";
case "2" : global $b = "two";
case "3" : global $b = "three";
}
echo $a." -> ".$b;
みたいなことをやりたいのですが、switch文では無理ですか?
if,elseif...なら可能なのですが…
0467nobodyさん
03/11/07 15:40ID:???それを実行すると1〜3のどれを$aに入れても$bが"three"になっちゃう
各分岐のお尻にbreak;付けましょうね
switch($a) {
case "1" : $b = "one"; break;
case "2" : $b = "two"; break;
case "3" : $b = "three"; break;
}
0468nobodyさん
03/11/07 15:43ID:???よく嫁
http://www.php.net/manual/ja/control-structures.switch.php
0470463
03/11/12 04:51ID:FrBzA+Quありがとうございます。
そういえば、php4からヒアドキュメント使えるようになったんですよね。
(php3の知識はあっても、4の知識はあまりないもんで)
ヒアドキュメントで逝ってみます。
ただ、print qq|ほげー|;の手軽さが、なれてしまって、ラクなんですけどね。。。
ともかく、ありがとうございました。
0471nobodyさん
03/11/12 05:09ID:???0472nobodyさん
03/11/12 06:00ID:???↓このへんわかりやすいんちゃう?
http://itbtech.itboost.co.jp/php/php_01.php
<引用>
PHP の変数は宣言がありません。
また、明示的に型の指定をしてやる必要もありません。
この辺は Perl と同じです。
必要に応じてキャスト(相当のこと)を行うことはできます。
</引用>
0473nobodyさん
03/11/12 17:05ID:???という書き方を多用していたのですが、
PHPでは$a = !isset($a) ? "default a" : $a;
でよろしいのでしょうか?
0474nobodyさん
03/11/12 20:14ID:???なら、
$a || ($a = "default a");
$a or $a = "default a";
とか。
$a |= "default a";
はそのままで通る。
(perl/PHP共に期待したものではないと思うけど)
0475473
03/11/12 21:19ID:???すみません、先ほどは$a ||= "default a";
のことを言っておりました。
で、$a || ($a = "default a");
ですと、$aが未定義の場合、undefined errorが出てしまいます。
(当方error_reporting = ALLにしています)
0476nobodyさん
03/11/12 21:56ID:???isset($a) || ($a = "default a");
これでどう?
厳密にはこうだろうけど、
(isset($a) && $a) || ($a = "default a");
長すぎ。
# PHP的には、先にデフォルトを設定するものだと思ってた。
# PHPのエロイ人plz。
0477473
03/11/12 22:08ID:???これなら問題なく実行できました。この書き方が一番スマートそうですね。
0478nobodyさん
03/11/12 22:08ID:???0479nobodyさん
03/11/12 22:34ID:???php.iniの設定変更
arg_separator.input = ";&"
しか思いつかない。
Perlと関係なければ、
【PHP】質問スレッド Part11
http://pc2.2ch.net/test/read.cgi/php/1067635640/l50
こちらへどぞ。
0480nobodyさん
03/11/26 02:30ID:???別に用は無いんだけど
0483nobodyさん
03/12/12 01:34ID:???0484nobodyさん
03/12/14 00:06ID:???fsockopenの第一引数にIPアドレスを入れれば、
内部的に名前の解決をしなくて済むのでしょうか?
0485nobodyさん
03/12/14 21:20ID:???IP address がすでにわかってるのに名前の解決?
Ip address => name なら、そもそも必要ない。
fsockopen関数の内部で、PHPが名前え解決するかどうかとういう話であれば、
inet_aton が失敗すれば(第一引数のhostが IP address を表す文字列でない場合)、
名前の解決(gethostbyname)がされる様です。
0486nobodyさん
03/12/14 23:41ID:???>fsockopen関数の内部で、PHPが名前え解決するかどうかとういう話であれば、
>inet_aton が失敗すれば(第一引数のhostが IP address を表す文字列でない場合)、
>名前の解決(gethostbyname)がされる様です。
なるほど、ありがとうございます。
大変参考になりました。
0487486
03/12/17 00:08ID:???処理にかかる時間を比べたんですが、
前者の方が多少遅い結果になりました。
perlの場合とはやはり違うのでしょうか…?
0488nobodyさん
03/12/18 13:37ID:SDZbq9mqっていうのはPHPではどう書けば良いでしょうか?(´・ω・`)?モニュ
小一時間探したけど見つかりませんでした
0489nobodyさん
03/12/18 13:59ID:SDZbq9mq検出されたらエラーを表示させる事です。
perlだと
if(($_ =~ tr/a-zA-Z0-9//c) {
die 'リストに含まれない文字が検出されたYO!';
}
な感じでそれをPHPでやりたいです。
0490nobodyさん
03/12/18 15:25ID:???http://pc2.2ch.net/test/read.cgi/php/1070639208/
0491nobodyさん
03/12/18 16:46ID:???どうせろくでもないベンチスクリプトだろ
>488
既出
>789
!
0492nobodyさん
03/12/18 20:33ID:???$str = ...
if (ereg("[^a-zA-Z0-9]", $str)){
die('リストに含まれない文字が検出されたYO!');
}
多分"[^[:alnum:]]"でも。
0493nobodyさん
03/12/18 20:37ID:???0494nobodyさん
03/12/21 18:56ID:16zntf/gぇ?ネタですか?(´・ω・`)?モニュ
-zA-Z0-9にマッチでエラー表示
じゃないでつ。文字列中に例えば
記号が入ってたらエラーにする処理でつ。
0495nobodyさん
03/12/21 20:52ID:???491のでええやん。elseでもいいし。
0497nobodyさん
03/12/22 17:55ID:???0498nobodyさん
03/12/22 19:05ID:???0499nobodyさん
03/12/23 11:09ID:hM9+gLxRぉぉやってみたら確かにマッチした。さんくすこ。
PHPだと’^’って反転する意味なのですか・・・?
なんか小さな幸せを発見したw
0500nobodyさん
03/12/23 11:15ID:hM9+gLxRぁぁぼけてすまそ。。。
文字クラスの反転記号ですね。記憶から全く遠のいていますた。
(PHPの独自拡張なのかとさえ思ってしまったw)
もう一度勉強し直し逝ってきま _| ̄|○
0501nobodyさん
04/01/19 18:13ID:???で、どのへんまでできた?
なぜかおれも作るハメになってしまって、
BNFで定義しきれないPerlを無理やりBNFレベルで定義中なんだけど。
そこまでPerl詳しくねーんで困ってる。
parrotのライブラリにPerl6のパーサーやってるっぽいんだが、、むずい。
だれか、なんちゃってPerl BNF定義した人おらんですか。。
0502501
04/01/19 18:23ID:???コンテンツか。。ツールじゃないのね。。シツレイ
0503nobodyさん
04/01/23 00:02ID:Zt/PsL2Cidはadmin、passは111111だったとして、
test.php?id=admin&pass=111111と入力します。
test.php内で
idとpassの値を受け取るには、$id=param[id]でしたっけ?
0504nobodyさん
04/01/23 00:24ID:Zt/PsL2C$_GET["id"];
$_GET["pass"];
0506nobodyさん
04/01/23 01:03ID:Zt/PsL2Cここ読みました。
http://php.s3.to/off.txt
これも対策済まれている方が多いことですが、
Warning: REG_EBRACK in
eregi関数で文字比較するとき、全角の「ー」の2バイト目が半角では“[”になるのが原因らしい・・
簡単な解決方法ありますでしょうか?
0507俺様
04/01/23 01:17ID:???いや、俺もツール考えてみたんだわ。
PHPなら文法定義しているの発見したんだけど
Perlは見つからないんだよね。。。
perly.yにあるyacc文法も読んだんだけど
文法以前に字句解析どうしようって感じで。
0508nobodyさん
04/01/23 02:04ID:???extract() するなら、$_GETでアクセスする必要ないかと…
register_globals=off がデフォになったのは、
未初期化の変数が汚染されたりとか
セキュリティ面の問題が利便性より重要だったからではないのかなぁ
なので、extract()するならその配列の安全チェックをしてからのほうが良いかと。
0509nobodyさん
04/01/23 02:08ID:???内部エンコーディングをEUCかUnicodeにする。
入力変換をautoにする。
これで、内部では、EUCかUnicodeになるので、その手の問題に遭遇しない。
海外製ソフトでSJISはいいことがない。
0510nobodyさん
04/01/23 02:13ID:???内部エンコードにそろえてやる必要があると思います。
0511nobodyさん
04/01/23 23:10ID:???list()でログファイル(5MB程度)を参照して検索などを作るとき、
fopen()
flock()
Fclose()
しなくてもログファイルの破損などは起こらないでしょうか?
書き込み中はロックしてますが、list()中はロックしないとします。
0513アノニマス
04/02/16 18:58ID:O91ZKuNrどこがおかしいの?
//10桁の1...と12桁の2...の配列がある。
$str = array('1111111111','222222222222');
//10桁以上、10桁以下の(要は10桁のみ)数値パターンを配列$resultに格納したい。
$hoge = preg_grep("/[0-9]{10,10}/",$result);
//結果、両方でてきちゃう。どうして?
print_r($result);
よろしこ。
0514イ奄様
04/02/16 19:15ID:PkrMZZ9mそれだと
"hoge1234567890hage"とかにもマッチする。
数字で始まり10個目の数字で終わるなら
$result = preg_grep("/^[0-9]{10,10}$/",$str);
0515イ奄様
04/02/16 19:18ID:???でもいい
0516アノニマス
04/02/16 19:35ID:O91ZKuNr有難うございます。なるほどよく分りました。
しかも、問題が間違えているにもかかわらずよく理解してくださいました。
重ねて御礼します。
出したかった問題は、こうでした。
$result = preg_grep("/[0-9]{10,10}/",$str);
まぁ、間違ってんだから訂正は要らないんだけどね・・・。
0517nobodyさん
04/02/16 21:57ID:???perlとPHPで結果が違うのかと思ったよw
0518nobodyさん
04/03/05 15:09ID:???Perlの「undef」に相当するPHPの関数は何ですか?
マニュアル検索しても見つけられなかったのです。
スレ違いでしたらスルーでお願いします。
0520nobodyさん
04/03/08 22:21ID:???PHPでも同じことは出来るのでしょうか?
0522nobodyさん
04/04/06 09:54ID:Rt5G2mKKJavaScriptではarguments[0]...に、入るじゃないですか。
PHPでは何に入るのでしょうか?
もしかして必ず function x($a,$b,$c) の様にする必要があるのでしょうか?
何とかして引数を配列として扱いたいのです。
0523nobody
04/04/06 11:33ID:???function ほらよ ($配列) { print_r($配列); }
ほらよ(array('a', 'b', 'c'));
0525nobodyさん
04/04/06 14:59ID:???0526nobodyさん
04/04/18 21:32ID:???0527nobodyさん
04/04/19 04:39ID:???0528nobodyさん
04/04/19 13:09ID:???0530カポコン
04/04/21 13:43ID:???よろしこ。
0532nobodyさん
04/04/21 21:28ID:???Shift_JISでスクリプトを書いてはいけない理由、
どうしてもShift_JISで書きたい場合はどのPHPをインストールすべきとか
mb_string周りのPHP.iniの設定の仕方、設定のオーバーライドの方法を解説して欲しい。
あと、PerlにもHTML埋め込みを行う方法がいくつかあるよ。
0534カポコン
04/04/26 10:25ID:???その真珠のヴァージョンは何ですか?
requireを使用するとか笑わせる答えじゃないですよね?
>>533
>しかし、CやJavaなどと比べPerlの方が極力型を意識しない言語仕様
>になっているというのは認めざる終えません。
あーそんな風に書いてたんだね。そのうち、なんとか汁。
# 真珠批判やってるサイトって他にもあるもんだねー。
0535532
04/04/27 05:54ID:???0536nobodyさん
04/04/30 23:59ID:um4DKqqr下記のような方法を取っていたのですが、
これをphpで行う場合、multisortでは1項目でのソートしか出来ないと
マニュアルに記述されていますが、どのような処理でなら可能でしょうか?
@DATA = sort { (split(/,/,$b))[1] <=> (split(/,/,$a))[1] || (split(/,/,$a))[2] <=> (split(/,/,$b))[2]; } @DATA;
0537nobodyさん
04/05/01 06:06ID:???http://jp.php.net/manual/ja/function.usort.php
0538nobodyさん
04/05/01 07:23ID:???あまり真面目に見ていないけど、もっと説得力ある文章になるくらい
たくさんプログラムを作ってみた方が良いんじゃないかな。
今の状態だと言語の違い以前に本当にプログラムを作った事が
あるんだろうかと疑いたくなるよ。
>>535
気にすんな
0539nobodyさん
04/05/03 01:13ID:N715jxDT0540nobodyさん
04/05/08 15:25ID:???http://f13.aaacafe.ne.jp/~mugen/perlvsphp/page7.htm
↑を MVC と呼ばれては碇浸透
コンテンツとデザインの分離スレにちょっと鯉 >>350
0542nobodyさん
04/05/20 12:08ID:NShBOzWM@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に乗り遅れまいと必死だが…。(^^;)
0543nobodyさん
04/05/20 16:11ID:???0544nobodyさん
04/12/07 16:29:25ID:???んで、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]}];
.......
}
0545nobodyさん
05/03/03 01:29:07ID:eDjoFwC+next関数にあたるものは何になるのでしょうか?
ご教示いただけますと幸いです。
0548nobodyさん
05/03/03 14:56:14ID:???おれがPHP使い始めたころと同じこと考えとるな
きっと次は$がいらないんじゃないかとか
printした時に自動で配列表示して欲しいとか
正規表現や無名関数使いずれーとか
便利な関数がイパーイあってええねとか
クラスがPerlよりはおしゃれだとか
↓
0549nobodyさん
05/03/08 04:57:03ID:???リファレンス変数とか可変変数で戸惑うとか
多重継承できないってなんだよとか
DBはいいなとか
↓
0550nobodyさん
05/03/08 07:20:38ID:???デフォルトでハッシュな配列はステキですねとか
array_map_recursive()きぼんとか
↓
0551nobodyさん
2005/11/06(日) 12:54:25ID:szZvbyxNPHP覚える時間と暇があれば、JavaとかCが使えるようにスキル磨け。
0552nobodyさん
2005/11/07(月) 01:20:42ID:???0553nobodyさん
2006/01/20(金) 19:20:58ID:???0554nobodyさん
2006/03/13(月) 04:51:31ID:???0555nobodyさん
2006/03/31(金) 03:55:29ID:???0556nobodyさん
2006/04/27(木) 19:27:28ID:???0557nobodyさん
2006/04/28(金) 03:16:17ID:???俺様タンのレスぶっこ抜いただけなので
だめなようならすぐ消します。
txtだけどhtmlにリネームしてくだせ。
http://bebe.run.buttobi.net/up/src/be_1673.txt.html
0558557
2006/04/28(金) 03:19:25ID:???0559nobodyさん
2006/05/15(月) 05:54:56ID:KM0klNRe乙。もらいます
0560nobodyさん
2006/09/20(水) 11:53:55ID:uaOOSUkQ0561560
2006/09/20(水) 12:00:23ID:uaOOSUkQヒアドキュメントは、インデントが崩れるので大袈裟でちょっと扱いにくい。
0562nobodyさん
2006/09/24(日) 06:15:19ID:???0563nobodyさん
2007/05/04(金) 02:57:45ID:SmDWSadW0564nobodyさん
2007/05/07(月) 03:01:24ID:???php経験があり、perl未経験です、
perlスクリプトを眺めているのですが、どうもわからない構文が多々あります。
サブルーチン if ($hoge && $> == 0);
↑これってどういう意味を表しているのでしょうか?
ifの前にサブルーチンが存在するのと、
$hoge && $> == 0 の意味がわからんです。
0565nobodyさん
2007/05/08(火) 00:36:50ID:???$hogeが真かつrootで実行されている時だと思う
> ifの前にサブルーチンが存在するのと、
Perlの基本的な変体文法なので入門書読め
0566nobodyさん
2007/05/09(水) 21:29:36ID:+HRKvy3U0567nobodyさん
2007/09/17(月) 05:29:18ID:j/liUul9>566
$foo=%hoge;
print $foo;
ってなってんじゃね
鯨のハラワタが散らかってるとか言われる部分だから気にするな
perl嫌になてきた
だからといってphpも嫌だぜ
Lispでもはじめようぜ
0568nobodyさん
2007/09/17(月) 14:53:34ID:???0569nobodyさん
2007/09/17(月) 19:28:13ID:???0570nobodyさん
2007/09/18(火) 21:48:20ID:???悩んでいます。
何方か指南していただけないでしょうか?
問題の内容は以下に、
内容
フォームから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文を使うとあります。
どうかお願いします。
0571nobodyさん
2007/10/04(木) 11:12:02ID:Ba37oSfYこれ
↓
$a1="0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ./";
$a2=substr($a1,int(rand(64)),1).substr($a1,int(rand(64)),1);
$cryptpass = crypt($pass,$a2);
をPHPで同じことさせるにはどうしたらいいのでしょうか・・・
0572nobodyさん
2007/10/04(木) 11:18:40ID:???これだけ代えればいけるんじゃね?
0573nobodyさん
2007/10/04(木) 14:18:23ID:Ba37oSfYあなたは神だ。
ありがとうございました^^
本当助かりました。
0575nobodyさん
2007/10/20(土) 02:19:47ID:???単なるテキストファイルをincludeするだけだったら
SSIとPHPとどっちがサーバ負荷が少ないかな?
0576nobodyさん
2007/10/20(土) 02:42:16ID:???ただ、組み込むモジュールmod_includeとmod_phpではmod_phpの方が断然メモリ食う
0577nobodyさん
2007/10/23(火) 00:14:10ID:???遅くなったがありがトン
すでに構築されてるサイトを引き受ける事になったんだけど
SSIだらけだったんでちょっと気になってね
PHPの方が利便性良さそうなんで移行しようかと思ったけど静観かな
0578nobodyさん
2008/05/25(日) 10:56:38ID:???while (($key,$val) = each %in) {
って言う良く見るPerlをphpで書き直すと?
extractだとPOSTとGET両方は拾えないみたいですし。
キーごとに処理を分けるのは、phpではどうしたら?
教えて下さい神様。
0579nobodyさん
2008/05/27(火) 23:52:32ID:???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の方が良く解らないので見当はずれだったらごめん。
0580nobodyさん
2008/05/28(水) 23:19:19ID:???上述の方法でやってみます。
助かりました!
0581nobodyさん
2008/06/04(水) 07:29:17ID:???すでに%inに入ってる訳だがその辺は良いのか?
>>579
俺はPHPはイマイチなんだが、$_POSTか$_GETを判別して別のハッシュに入れ
そのハッシュをeachした方が良くね?
0582nobodyさん
2008/06/05(木) 21:39:46ID:???Perlでいうハッシュ=連想配列:$QUERY{$key} = $valで、
$_POSTや$_GETは既に判別された後のハッシュと同じと解釈してますが、
実際どうなんだろう?
0583nobodyさん
2008/06/06(金) 10:39:11ID:???ループ自体が1つに出来るっていう話
0584nobodyさん
2008/06/06(金) 11:40:29ID:???0586nobodyさん
2008/06/16(月) 20:24:30ID:???Perlのtimelocal()的なものがphpでありますでしょうか?
0587nobodyさん
2008/06/16(月) 21:19:36ID:???こんな感じでどうだす?
mktime(HH,MM,SS,mm,dd,yyyy);
0589nobodyさん
2008/06/17(火) 09:51:41ID:???$PI = ereg_replace("\.\d*", "", $PI);
とすると、31415になってしまいました。perlの
s/\.\d*//;
だとうまくいくのですが、何かPHPでの注意点ありんすか?
0590nobodyさん
2008/06/17(火) 23:01:21ID:???$PI = ereg_replace("\.[0-9]*", "", $PI);
$PI = preg_replace("/\.\d*/", "", $PI);
こんなんどうだべ?
0592nobodyさん
2010/06/19(土) 14:31:36ID:???どれを使うのが一番なのでしょうか?
・tryとcatch
・set_error_handler
・PEAR_Error
自分は、try catchが一番いいと思いつかっています。
■ このスレッドは過去ログ倉庫に格納されています