PHPとPERLの比較

WBOY
リリース: 2016-06-23 14:35:15
オリジナル
938 人が閲覧しました












: 匿名 出典: Webmaster Bar 日付: 2006-01-10クリック: 48 フォント: 大中小 エントリ: [Master8]












/php - コピーしたい場合は、このリンクを保持してください。

翻訳: ShiningRay @ Nirvana Studio
Directory
🎜 * パラメーターと戻り値は非常に矛盾しています🎜 * PHP は大文字と小文字を区別しない操作に別の関数を使用します🎜 * PHP の関数の名前は一貫性がありません🎜 * PHP には語彙スコープがありません🎜 * PHP のメイン名前空間には関数が多すぎます 🎜 * PHP の抽象化の欠如は、TIMTOWTDI を悪い極端な状態に導きます 🎜🎜 パラメーターと戻り値は非常に矛盾しています 🎜🎜 この問題を実証するために、ここに関数のリストを示します。ユーザーが定義したコンテンツと一致します: (おそらく、PHP を使用する人でも、どの関数を使用するかを確認するためだけにこのドキュメントを使用するでしょう: p) 🎜 S と一致するために小文字の非区別リターンを使用する数値配列パラメータの数を一致させます。 /M/m/m/m/m/m/m/ x フラグオフセット (-1=end) 🎜ereg No None None 0 🎜mb_ereg ereg[1] no all array no none 0🎜mb_ereg_replace ereg[1] string/式 no all なし Yes 0🎜mb_eregi_ereg[1] No すべて All No 配列 なし 0🎜mb_eregi_replace ereg[1] 文字列 No すべて No No 0🎜preg_match preg[2] すべて可能 One No 配列 Yes 0🎜preg_match_all preg すべて Yes No No配列 はい 0🎜preg_replace preg 文字列/式 すべて はい なし/すべて はい なし はい 0🎜Str_replace Str string すべてが数値であるかどうか 0
str_ireplace str string は、0
strstrstr、Strchr Str を除くすべての数値です。0
stristr Str を除くサブ文字列はありません。0
Strrrchr strastr はありません。文字列はありません。-1
strpos はありません。 str no no no now notripos str yes no index none none-1
mb_strposstr [1] no nowing no no nonmb_strrpos str [1] no nowe nowing no noge noge no no no nonただマッチングする この部分だけ。

(Perl では、これらすべての機能は 4 つの単純な演算子で実現できます。)

[1] マルチバイト文字の処理用
[2] PCRE 正規表現: いわゆる「Perl 互換」正規表現。
[3] PHP5 には文字列 str もあります
PHP は大文字と小文字を区別しない操作にさまざまな関数を使用します

(議論には 2 つの側面があるかもしれません。たとえそれが多くのことを意味するとしても、別の関数を提供する方が良いと考える人もいますPerl では、2 つの lc() または /i フラグを使用でき、PHP では通常、大文字と小文字を区別する変数が提供されます。また、大文字と小文字を区別しないバージョンでは、関数名の命名に一貫性がありません。 FPerl: $ FOO CMP $ Bar LC $ FOO FOO CMP LC $ Bar
PHP: Strcmp ($ FOO, $ Bar) Strcasecmp ($ FOO, $ Bar)
Perl: Index ($ FOO, $ Bar) Index (LC $ $ $) foo, lc $bar)
PHP: strpos($foo, $bar)tripos($foo, $bar)
Perl: $foo =~ s/foo/bar/ $foo =~ s/foo/bar/ i
PHP: $foo = str_replace("foo", "bar", $foo) $foo = str_ireplace(...)
PHP: $foo = ereg_replace("foo", "bar",$foo) $foo = eregi_replace(...)
PHP の関数の名前は一貫性がありません

* 大文字と小文字を区別しない関数には "i" または "case" が含まれています関数名の異なる位置。
* 下線ありとなし:

下線なし:

stream_get_line readline
disk_free_space discfreespace
is_object isset
mcal_day_of_week jddayofweek
set_error_handler setlocale
snmp_get_quick_print s nmpget
get_browser getallheaders
base64_encode urlencode
image_type_to_mime_type imagetypes
msql_num_fields mysql_numfields
php_uname phpversion
strip_tagstripslashes
bind_textdomain_codesetbindtextdomain
cal_to_jd gregoriantojd
str_rot13 strpos

Perl のコア関数名にはアンダースコアは含まれません。
* PHPにはシステムコールと一致するunlink、link、renameがありますが、touchのシステムコールはtouchではなくutimeです。确* 同時に、単語の順序を決定することはできません:
O オブジェクト動詞: Base64_Decode、IPTCPARSE、Str_shuffle、VAR_DUMP
O 動詞オブジェクト: Create_function、recode_string

Perl のコア関数は「動詞オブジェクト」構造です。 DBM* 機能用。 (内部の sys はオブジェクトではなくプレフィックスであることに注意してください。同時に、flock と lstat はシステム コールに従って名前が付けられます。shm* と msg* はライブラリ関数呼び出しです)
* "to" または "2"? ascii2ebcdic, bin2hex , deg2rad, ip2long, cal_to_jd (jdto*, *tojd), strto lower, strtotime,

PHP には字句スコープがありません

Perl には字句スコープと動的スコープがあります。 PHP ではそうではありません。范 Word メソッドのスコープがなぜなのかについては、スコープ付きのコピーを参照してください。
PHP Perl
Superbal なし あり 動的フィールド なし あり あり [1] Perl には、常にメインにある変数がいくつかあります。 : 名前空間。これらは、PHP のスーパーグローバル変数に似ています。
[2] サブプロセスブロック内でレキシカル変数を使用すると、関数のローカル変数として使用できます。
PHP のメイン名前空間の関数が多すぎます

(すべてのコア ディストリビューションで利用可能な拡張機能でコンパイルされたコア ライブラリを使用し、2003 年 11 月にリリースされたバージョンを使用しました)

PHP メイン関数の数: 3079 [1 ]
主要な Perl の数関数: 206 [2]

PHP 関数名の長さの中央値: 13
PHP 関数名の長さの平均: 13.67
Perl 関数名の長さの中央値: 6
Perl 関数名の長さの平均: 6.22

注、Perl の一部の関数には短い等価物があります。構文:

readpipe("ls -l") ==> `ls -l`
glob("*.txt") ==> <*.txt>
readline($fh) ==> <$fh>
quotemeta($foo) ==> "Q$foo"
lcfirst($foo) ==> "l$foo" (lc は L)
ucfirst($foo) ==> "u$foo" (uc は U)

[1] 出典: PHP クイック リファレンス
[2] 出典: perldoc perlfunc
PHP の抽象化の欠如により、TIMTOWTDI* は悪い極端な状態になります

*(複数あります) Way To Do It、それを行う方法は複数あります)

PHP には 3079 個の関数があるのに、Perl には 206 個しかないのはなぜですか? PHP には、よく似た関数がいくつかあります。 Perl では、知っておくべきことや覚えておくべきことははるかに少なくなります。

もう 1 つの重要な要素は、モジュール、特に DBI モジュールの使用です。カーネルに多くの機能を詰め込むのではなく、データベース サポートを提供するために使用されます。これはスペースを占有しますが、ほとんど使用されません。

(あまり使用されないモジュールはカウントされません (したがって、PHP の PEAR と Perl の IO::File はここでは除外されます)) コアが同様の機能を提供しない場合、これらのモジュールもカウントされます。簡単にするために、内部の仕組みは無視されます。 )

*

转义:

o

PHP: (14)
dbx_escape_string、escapeshellarg、escapeshellcmd、pg_escape_bytea、
pg_escape_string、pg_unescape_bytea、addslashes、addcslashes、 、
quotemeta、mysql_escape_string、mysql_real_escape_string、
mysqli_real_escape_string、sqlite_escape_string

o

Perl: (2) [1]
quotemeta, $dbh->quote

*

排序:

o

PHP: (16)
sort, arsort, asort, krsort, ksort, natsort, natcasesort、rsort、usort、
array_multisort、uasort、uksort、dbx_sort、imap_sort、ldap_sort、yaz_sort

o

Perl: (1)
sort

*

遍历列表:

o

PHP: (10)
array_filter、preg_grep、array_search、array_unique、in_array、array_map、
array_walk、array_count_values、array_change_key_case、array_sum

o

Perl: (2)
map、grep

*

分割:

o

PHP: ( 8)
split、explode、strtok、spliti、chunk_split、mb_split、preg_split、
str_split

o

Perl: (1)
split

*

適合:

o

字符串:

+

PHP: (11)
strstr、strchr、stristr、strpos、strrchr、stripos、mb_strpos、
mb_strrpos、strrpos、strripos、substr

+

Perl: (3)
index、rindex、お

正表达式:

+

PHP: (6)
ereg, eregi, mb_ereg, mb_eregi, preg_match, preg_match_all

+

Perl: (1)
m//

*

代替换適合部分:

* PHP: (12)
ereg_replace, eregi_replace, mb_ereg_replace, mb_eregi_replace,
preg_replace, str_ireplace, str_replace, ltrim, rtrim, trim, nl2br

* Perl: (1)
s///

*

接続しましたデータベース:

o

PHP: (17 以降)
dbx_connect、fbsql_connect、ibase_connect、msql_connect、msql_pconnect、
mssql_connect、mysql_connect、odbc_connect、pg_pconnect、
sesam、 _connect、ifx_pconnect、ifx_connect、sqlite_open、sqlite_popen、
mysqli_connect 、mysqli_pconnect

o

Perl: (2)
DBI->connect, DBI->connect_cached

*

打开(文件、进程等):

o

PHP: (5)
dio_open、 fopen、proc_open、popen、gzopen[2]

o

Perl: (2)
open, sysopen

*

读取/受信收:

o

PHP: (12)
d io_read、fread、gzread [2]、socket_read、socket_recv、socket_recvfrom、
socket_recvmsg、readline、fgetc、fgets、stream_get_line、file

o

Perl: (5)
read、readline、sysread、recv、getc

*

打印・出力/書き込み:

o

PHP: (14)
print、echo、printf、fprintf、vprintf、dio_write、fwrite、fputs、
gzwrite[2]、socket_send、socket_sendmsg、socket_sendto、socket_write、
socket_writev

o

Perl: (5)
print、printf、syswrite、send、write

*

关闭:

o

PHP: (7)
closelog、dio_close、fclose、gzclose[2]、pclose、socket_close、
proc_close

o

Perl: (1)
close

*

常用/ツール:

o

PHP:
array_combine、array_fill、array_flip、array_merge、list、range、count、
create_function、strtr、 pow、putenv、getenv、getmygid、getmypid、getmyuid

o

Perl:
语法または者魔术变量

[1] のため、システム统のLIST语法とDBIの占位符、显式转义常常は不要です
[2] Perl では PerlIO 層によって処理されます。詳細

* Re^2:PerlはJuerd、2005年にはまだ名前空間がありませんか?アレイoは役に立たない論理演算子です。悪い再帰サポート
O PHP はスレッド セキュリティではありません。 フォーマット文字 乱雑な許可


引引引引引引

* Perl vs. PHP -Octo "sbjektiver Vergleich by Florian Forster、2003 (ドイツ語)
O perl PHP よりもはるかに高速です
o perl
o perl Perl は PHP よりも豊富です
o Perl は PHP よりも優れたドキュメントを持っています
o PHP にはモジュラー サポートがありません
o PHP のヒアドキュメントは Windows ユーザーには役に立ちません
o PHP には一貫したデータベース API がありません
o PHP はデータベースのクエリ結果をキャッシュします 非常に危険です
o グラフィック的には、PHP は実際には GD に限定されています
* 私は PHP が嫌いです by Keith Devens, 2003
o 呼び出し時に参照渡しは推奨されません
* での PHP の使用経験Aaron Crane 著、2002 年
パフォーマンスとビジネス ロジックを組み合わせるには PHP を推奨します
Cartret、2002e o 実際の引用やポインタがありません
o 名前空間のない概念
o コンポーネントがありません
o Perl になりたいですが、実際のところ、私は Perl にはなりたくありませんでした
O 標準 DB インターフェイスなしで
o o すべての PHP コミュニティは非プログラマー向けです
o 配列はすべてハッシュテーブルです
o P EAR は CPAN ではありません
o 配列は値を文字列に補間できません ( $a=array();$b="$a"; は間違っています)
o 変数名をチェックする同様の "use strict" 関数はありません
* PHP: Ivan Ristic による愛と憎しみの関係
o コミュニティは私を不安にさせます
o 知識のある人がほとんどいません
o Zend の投稿も安全ではない行為を示唆しています St* 私の php ショッピングのリスト (nathan torkington、2001 年)
o 名前空間がありません
すべての関数はグローバルです
実体なし実際のデータ構造を持たない引用
(現在は --tnx.nl ではありません)
o 匿名関数はありません

Quote

EFnet #php: 19:45 PHP と Perl を比較するのは、梨と新聞を比較するようなものです

Perl モンクス: PHP - それは「自転車のない補助輪」です - - ランダル L. シュワルツ

(:::




関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート