アプリ版:「スタンプのみでお礼する」機能のリリースについて

PHPに統一された関数名を与える方法

開いていただきありがとうございます。
PHPユーザの間でもよく言われていることだと伺っていますが、PHPの関数名にはやや疑問符がつくようなものや統一性に欠けたものが多く見られます。
多くの方は「これはそういうものなのだ」と割り切って利用されているかと思いますが、自分の場合は神経質な性格が災いして、それを理由にPHPの利用に消極的で在り続けました。

さすがにこれは勿体ないと思い、自身で関数名にエイリアスを与えたライブラリでも作成しようかと思っていたのですが、既にそのようなものが存在すると伝え聞きました。ただ「PHP5でのオブジェクト指向導入に合わせて用意されたもので、自分はオブジェクト指向に興味がないから」と具体的なことは教えてもらえず仕舞いでした。

個人的には是非とも利用を検討したいのですが、PHPを敬遠していたことが災いしてコミュニティを覗っても詳細がようとして分かりません。もしご存じの方がいらっしゃれば、お手数ですが詳細をご教示いただければと存じます。

A 回答 (5件)

>> 自身で関数名にエイリアスを与えたライブラリでも作成しようかと


>> 思っていたのですが、既にそのようなものが存在すると伝え聞きました。

他人が作成したエイリアス名では、結局しっくりするか分からないでしょうから
自身で関数名をカスタマイズする方法を示します。

phpでは、組み込み関数も含めて名前をオーバーライドする機能が用意されています
runkitを導入すれば、runkit_function_rename で関数名を変更できます
php.ini で runkit.internal_override を有効にするのをお忘れなく!

参考URL http://www.php.net/manual/ja/book.runkit.php
    • good
    • 0
この回答へのお礼

本当にいろいろなものが用意されていますね。
用意されているものが豊富すぎて目的のものが見つからないというのもなんともですが(苦笑)。
何か調べるにあたって念頭においておくといいことなどありますでしょうか?

マニュアルを読み込んで動作等確認させていただこうと思いますが、
恐らく時間がかかってしまうので先にお礼だけ述べさせていただきます。

個人的にはどこまでも趣味に走っていいのならばOO言語としての体をなしたいのですが、
現実的に考えると少々欲張りすぎでしょうね。

お礼日時:2010/08/30 22:17

ちなみに、ご質問にあった、伝え聞いたというライブラリですが、



http://openpear.org/package/PHP_Object

これですかね。なんか近い感じはします。

他人が見たときの可読性などを気にしないのであれば、このようなものを使ってみるのもいいのではないでしょうか。


また、PHPを使うと割かし簡単に処理が出来る、ということと、利用者が多い為に情報が豊富にある、ということを除けば、特段他のスクリプト言語、Perl/Ruby/PythonとかでもWebアプリは構築できますし、
Webだと、Javaもかなりシェアがあります。MSのASPとかも。
さらに、CGIを使えば標準入出力が可能な言語であれば何でも構築出来てしまうので、
趣味で作成されるのであれば他の言語ものぞいてみてもいいかもしれないです。(当然既にその道は通過してそうですが。)

既に世間でも言語仕様などについても不満の声も上がっていたりするので、質問者さんのように潔癖であったりすると、関数名だけでなくいかようにもしがたい言語仕様のほうで、弊害が出そうで心配になりました。
    • good
    • 0
この回答へのお礼

遅くなってすみません。情報ありがとうございます。
確認してみましたがメソッドチェーンを可能にするのがメインということで、
残念ながら今回提示いただいたのは伝え聞いたものとはちょっと違うような気がします。
現在悪さをして逃亡中(苦笑)の情報元はオブジェクト指向とか理解する気もないPGだったので、
何らかの誤解があったのだとしてももうちょっと違うものになると思いますしね。

理想としては "Hello World!".length() などと書ければ最高ですが、
PHPはオブジェクト指向言語として設計されたわけではないので、さすがにそれは欲張りすぎですね。
メソッドチェーンも好きですが、このサンプルは本質を見失っているような気も^^;

普段は好んでRubyを利用するのですが、PHPはやはり無視しかねる存在ですので。
確かに言語仕様のレベルでいろいろと突っ込みたい部分はあるのですが、
それはどの言語にもありますし、どうしようもないという諦観の念で抑えられています。
いつかオレ言語を作ってやろうとは思いますが、YACC嫌いなので道は遠いというかだるそうです。
<愚痴>せめて学術書は肝心な部分をYACCに投げないでほしい。</愚痴>

本当にこの強迫性、SE/PGにとっては死病です。ストレス倍増です。
幸いわがままが効く立場なので今のところは大事には至っていませんが、時間の問題かもしれません。
PHP6で互換性を切り捨てた大規模刷新、なんて望めませんしね……。

ご心配まで本当にありがとうございます。皆様もどうぞ体調にはお気をつけください。

お礼日時:2010/09/03 13:06

単純に名前を治すっていうことであれば、




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

ですので、後でプログラムを見なおしたときには標準関数で作成したものであったほうが、分かりやすいのではないかなぁとは、思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。

確かに標準から外れることは可読性からしたら痛いんですよね。
ですので広く利用されているものならばまだましかなと思ったんですが、
ここまで情報がないということはガセだったみたいで、いろいろ検討中です。

そのくらい我慢すればいいじゃんというのが普通の意見でしょうが、
ぶっちゃけちゃえば潔癖の度が過ぎて強迫性障害とかいうのを患っちゃいまして、
何かが気になり始めたら最後、最悪ソース全破棄どころかOS入れ替えちゃう勢いなので、
症状が緩和するまではトリガーを除くことに必死だったりしますw;

仕事の方はうまく折り合いつけてるんですけどね……
趣味でも組まなきゃ気が済まないようなジャンキーなのでたちが悪いです。



あとどうでも愚痴なんですが、
and, or, xor が使えるんだから機能的には無意味でも not くらい対応してくれてもいいよなあ。

お礼日時:2010/09/02 09:47

PHP5でJavaScriptを模倣したライブラリがあるようです。

(使用経験はありません)

J4P5: Javascript For PHP 5
http://j4p5.sourceforge.net/
PHP5上でJavascriptを動かす: J4P5:phpspot開発日誌
http://phpspot.org/blog/archives/2006/01/php5jav …
PHP5でJavascriptを動かす J4P5 - nazonoDiary
http://d.hatena.ne.jp/nazoking/20060321/1142880772

発想自体は良いと思いますが、「文法を知っている」程度の理解度から「J4P5」を習得するのはやや危険を伴うように思います。
JavaScriptライブラリでもありがちなのですが、ライブラリの使い方は覚えても、基礎的な知識が足りないためにとんでもない質問をする方がいらっしゃいます。
最終的にライブラリを使うとしても、まず、じっくりと基礎を固めてからの方がいいのではないでしょうか。

場合によってはライブラリにバグがあったのだが、どこに問題があるのかわからず…という事態も考えられます。
せめて、問題点を把握できる程度にはPHPを理解してから、ライブラリを使用した方が良いのではないかと…。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
純粋に面白そうな試みですがまだ途上と言った様子ですね。
クロージャの動作が不安定などというのは、技術的に難しいのですが惜しいところです。

また表現に誤解があったようですので訂正を入れさせていただきます。
PHPの「文法を知っている程度」というのは基礎の基礎しか知らないというよりも、
ライブラリなどの背景事情はPEAR程度も満足に理解できていない、
文法書に書かれていることしか知らないような頭でっかちという意味で解釈してください。

ライブラリを使いこなせるかどうかというところまで心配していただけるのはありがたいですが、
その点に関しましては心配をしていませんし、何かあっても自己責任のつもりです。
なら自分で調べろよと言われてしまいそうですが、それはしているのですが、
PHPのコミュニティが広すぎて五里霧中に近い状態と捕らえていただければ幸いです。
そのため、せめて足掛かりを与えてもらえればと思い質問させていただきました。

お礼日時:2010/08/30 17:11

>自身で関数名にエイリアスを与えたライブラリでも作成しようか



なにをもって統一性に欠けるとおっしゃるっているのかわからないので何とも言えませんが
結局誰かがなんらかの統一性をもたしたとしても、自分に合わなければだめなんですよね?
であれば、ご自身でやる以外にないでしょう。

ただ、ご自身用にカスタマイズしたものは他人にとってはまた使いにくいものです。
グループで作業するならグループで決めごとをするか、デフォルトのものを使うかしか
ないでしょう。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お返事遅くなってしまいすみません。

何をもって統一性があると看做すのかは難しい問題かもしれませんが、
個人的には他の主要な言語程度に違和感を覚えなければ問題ありません。
具体的にPHPの奈辺に違和感を覚えるのかといいますと、

 htmlentities() ⇔ html_entity_decode()

例えばこのように対称関係にあるものなどが挙げられます。
名前に対して挙動がおかしいなどは議論の対象となるかもしれませんが、
対称関係にある関数の名前はやはり対称的であってもいいと思うのですよ。

もちろん当然どの言語でも何かしら思うことはありますし、
それが少しも許せないとなればマイ言語に引きこもるしか道はないのでしょうが、
PHPに違和を覚える声は、他言語と比べても格段に多い気がします。

幸いPHPでグループ作業をする予定はありませんが、
公式・準公式でそのような統一されたものがあるのなら、素直にそちらを利用したいです。
正直ライブラリの規模が大きすぎて自作は厳しいという面もありますしね。

PHPに関しては正直「文法を知っている」程度の理解度ですので、
何かしらヒントになりそうなものでも教えていただければ幸甚です。

お礼日時:2010/08/30 04:52

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!