- ベストアンサー
PHPに統一された関数名を与える方法
- PHPの関数名には統一性に欠けたものが多く見られます。自分の場合は関数名にエイリアスを与えたライブラリを作成しようと思っていましたが、既にそのようなものが存在するようです。
- 既存のライブラリはPHP5でのオブジェクト指向導入に合わせて作られたものですが、オブジェクト指向に興味がない場合でも利用を検討する価値があります。
- 詳細はコミュニティで得ることができますが、PHPを敬遠していたために情報が不足している状況です。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
>> 自身で関数名にエイリアスを与えたライブラリでも作成しようかと >> 思っていたのですが、既にそのようなものが存在すると伝え聞きました。 他人が作成したエイリアス名では、結局しっくりするか分からないでしょうから 自身で関数名をカスタマイズする方法を示します。 phpでは、組み込み関数も含めて名前をオーバーライドする機能が用意されています runkitを導入すれば、runkit_function_rename で関数名を変更できます php.ini で runkit.internal_override を有効にするのをお忘れなく! 参考URL http://www.php.net/manual/ja/book.runkit.php
その他の回答 (4)
- hogehoge78
- ベストアンサー率80% (433/539)
ちなみに、ご質問にあった、伝え聞いたというライブラリですが、 http://openpear.org/package/PHP_Object これですかね。なんか近い感じはします。 他人が見たときの可読性などを気にしないのであれば、このようなものを使ってみるのもいいのではないでしょうか。 また、PHPを使うと割かし簡単に処理が出来る、ということと、利用者が多い為に情報が豊富にある、ということを除けば、特段他のスクリプト言語、Perl/Ruby/PythonとかでもWebアプリは構築できますし、 Webだと、Javaもかなりシェアがあります。MSのASPとかも。 さらに、CGIを使えば標準入出力が可能な言語であれば何でも構築出来てしまうので、 趣味で作成されるのであれば他の言語ものぞいてみてもいいかもしれないです。(当然既にその道は通過してそうですが。) 既に世間でも言語仕様などについても不満の声も上がっていたりするので、質問者さんのように潔癖であったりすると、関数名だけでなくいかようにもしがたい言語仕様のほうで、弊害が出そうで心配になりました。
お礼
遅くなってすみません。情報ありがとうございます。 確認してみましたがメソッドチェーンを可能にするのがメインということで、 残念ながら今回提示いただいたのは伝え聞いたものとはちょっと違うような気がします。 現在悪さをして逃亡中(苦笑)の情報元はオブジェクト指向とか理解する気もないPGだったので、 何らかの誤解があったのだとしてももうちょっと違うものになると思いますしね。 理想としては "Hello World!".length() などと書ければ最高ですが、 PHPはオブジェクト指向言語として設計されたわけではないので、さすがにそれは欲張りすぎですね。 メソッドチェーンも好きですが、このサンプルは本質を見失っているような気も^^; 普段は好んでRubyを利用するのですが、PHPはやはり無視しかねる存在ですので。 確かに言語仕様のレベルでいろいろと突っ込みたい部分はあるのですが、 それはどの言語にもありますし、どうしようもないという諦観の念で抑えられています。 いつかオレ言語を作ってやろうとは思いますが、YACC嫌いなので道は遠いというかだるそうです。 <愚痴>せめて学術書は肝心な部分をYACCに投げないでほしい。</愚痴> 本当にこの強迫性、SE/PGにとっては死病です。ストレス倍増です。 幸いわがままが効く立場なので今のところは大事には至っていませんが、時間の問題かもしれません。 PHP6で互換性を切り捨てた大規模刷新、なんて望めませんしね……。 ご心配まで本当にありがとうございます。皆様もどうぞ体調にはお気をつけください。
- hogehoge78
- ベストアンサー率80% (433/539)
単純に名前を治すっていうことであれば、 function html_entity_decode($string, $quote_style=ENT_COMPAT, $charset="ISO-8859-1", $double_encode=true){ return htmlentities($string, $quote_style, $charset, $double_encode); } とラップしてやればよいのではないかと。 HTMLのビューでよく使う「htmlspecialchars」もアンダーバーで区切ってみたところで、恐ろしく長いので、ラップして「h」という関数名にしてしまうこともよくやります。 ただ、PHPが流行った理由の一つに、公式マニュアルが親切、というのがあります。 http://jp.php.net/{関数名} としてアクセスしてやれば標準関数であればすぐに解説が見れます。 例) http://jp.php.net/htmlentities ですので、後でプログラムを見なおしたときには標準関数で作成したものであったほうが、分かりやすいのではないかなぁとは、思います。
お礼
回答ありがとうございます。 確かに標準から外れることは可読性からしたら痛いんですよね。 ですので広く利用されているものならばまだましかなと思ったんですが、 ここまで情報がないということはガセだったみたいで、いろいろ検討中です。 そのくらい我慢すればいいじゃんというのが普通の意見でしょうが、 ぶっちゃけちゃえば潔癖の度が過ぎて強迫性障害とかいうのを患っちゃいまして、 何かが気になり始めたら最後、最悪ソース全破棄どころかOS入れ替えちゃう勢いなので、 症状が緩和するまではトリガーを除くことに必死だったりしますw; 仕事の方はうまく折り合いつけてるんですけどね…… 趣味でも組まなきゃ気が済まないようなジャンキーなのでたちが悪いです。 あとどうでも愚痴なんですが、 and, or, xor が使えるんだから機能的には無意味でも not くらい対応してくれてもいいよなあ。
- think49
- ベストアンサー率59% (285/482)
PHP5でJavaScriptを模倣したライブラリがあるようです。(使用経験はありません) J4P5: Javascript For PHP 5 http://j4p5.sourceforge.net/ PHP5上でJavascriptを動かす: J4P5:phpspot開発日誌 http://phpspot.org/blog/archives/2006/01/php5javascript.html PHP5でJavascriptを動かす J4P5 - nazonoDiary http://d.hatena.ne.jp/nazoking/20060321/1142880772 発想自体は良いと思いますが、「文法を知っている」程度の理解度から「J4P5」を習得するのはやや危険を伴うように思います。 JavaScriptライブラリでもありがちなのですが、ライブラリの使い方は覚えても、基礎的な知識が足りないためにとんでもない質問をする方がいらっしゃいます。 最終的にライブラリを使うとしても、まず、じっくりと基礎を固めてからの方がいいのではないでしょうか。 場合によってはライブラリにバグがあったのだが、どこに問題があるのかわからず…という事態も考えられます。 せめて、問題点を把握できる程度にはPHPを理解してから、ライブラリを使用した方が良いのではないかと…。
お礼
回答ありがとうございます。 純粋に面白そうな試みですがまだ途上と言った様子ですね。 クロージャの動作が不安定などというのは、技術的に難しいのですが惜しいところです。 また表現に誤解があったようですので訂正を入れさせていただきます。 PHPの「文法を知っている程度」というのは基礎の基礎しか知らないというよりも、 ライブラリなどの背景事情はPEAR程度も満足に理解できていない、 文法書に書かれていることしか知らないような頭でっかちという意味で解釈してください。 ライブラリを使いこなせるかどうかというところまで心配していただけるのはありがたいですが、 その点に関しましては心配をしていませんし、何かあっても自己責任のつもりです。 なら自分で調べろよと言われてしまいそうですが、それはしているのですが、 PHPのコミュニティが広すぎて五里霧中に近い状態と捕らえていただければ幸いです。 そのため、せめて足掛かりを与えてもらえればと思い質問させていただきました。
- yambejp
- ベストアンサー率51% (3827/7415)
>自身で関数名にエイリアスを与えたライブラリでも作成しようか なにをもって統一性に欠けるとおっしゃるっているのかわからないので何とも言えませんが 結局誰かがなんらかの統一性をもたしたとしても、自分に合わなければだめなんですよね? であれば、ご自身でやる以外にないでしょう。 ただ、ご自身用にカスタマイズしたものは他人にとってはまた使いにくいものです。 グループで作業するならグループで決めごとをするか、デフォルトのものを使うかしか ないでしょう。
お礼
回答ありがとうございます。 お返事遅くなってしまいすみません。 何をもって統一性があると看做すのかは難しい問題かもしれませんが、 個人的には他の主要な言語程度に違和感を覚えなければ問題ありません。 具体的にPHPの奈辺に違和感を覚えるのかといいますと、 htmlentities() ⇔ html_entity_decode() 例えばこのように対称関係にあるものなどが挙げられます。 名前に対して挙動がおかしいなどは議論の対象となるかもしれませんが、 対称関係にある関数の名前はやはり対称的であってもいいと思うのですよ。 もちろん当然どの言語でも何かしら思うことはありますし、 それが少しも許せないとなればマイ言語に引きこもるしか道はないのでしょうが、 PHPに違和を覚える声は、他言語と比べても格段に多い気がします。 幸いPHPでグループ作業をする予定はありませんが、 公式・準公式でそのような統一されたものがあるのなら、素直にそちらを利用したいです。 正直ライブラリの規模が大きすぎて自作は厳しいという面もありますしね。 PHPに関しては正直「文法を知っている」程度の理解度ですので、 何かしらヒントになりそうなものでも教えていただければ幸甚です。
お礼
本当にいろいろなものが用意されていますね。 用意されているものが豊富すぎて目的のものが見つからないというのもなんともですが(苦笑)。 何か調べるにあたって念頭においておくといいことなどありますでしょうか? マニュアルを読み込んで動作等確認させていただこうと思いますが、 恐らく時間がかかってしまうので先にお礼だけ述べさせていただきます。 個人的にはどこまでも趣味に走っていいのならばOO言語としての体をなしたいのですが、 現実的に考えると少々欲張りすぎでしょうね。