- ベストアンサー
同機能の、「組み込み関数」と「ユーザ関数」、両者の性能差について。
いつもお世話になっております。 PHP5.2.5 Apache1.3.37 SQLite3.3.7 PHPには、組み込み関数が予め、膨大な数、用意されているという話なので、 実際には、 有用であるけども出会うことのない組み込み関数 というものもあるように思います。 この場合、 そういった組み込み関数と同機能のユーザ関数 を車輪の再開発してしまうことが考えられます。 そこで、私が知りたいことは、 組み込み関数で提供されている機能を、 ユーザ関数で実現する際、 性能を損なわずに(つまり、処理速度面でも同等に)、 ほぼ等価な関数をユーザ関数で作ることはできるのか、 ということです。 よく使用されるお馴染みの関数の多くは、 それ自体、基本的な機能でのみ構成されていると思われるので、 それをユーザ関数で実現するとなると、 私にも、「それは難しそうだな…」と思えますが、 そうではなく、 かなりマニアックな関数、 つまり、 基本的な組み込み関数を複数組み合わせて作られているような、 そんな組み込み関数も、中にはあるわけで、 それらの中には、よく知られておらず、 車輪の再開発されてしまうものも多いと思います。 (再開発自体を回避する策があるのであれば、それも知りたいと思います) PHPの中の構造について詳しくないので、 既に変なことを言っているかもしれませんし、 以下でも、さらに変なことを言うかもしれませんが、 組み込み関数とは、C言語など、PHPではない言語で作られていたりするのでしょうか? (処理速度をあげる、等の理由から) そうであるならば、 ユーザがPHPを操って作るユーザ関数は、出来る限り作らず、 既存の「組み込み関数」を利用したい、と私は考えます。 よって、「知りたいこと」を要約すると、 ・車輪の再開発を防ぐ方法 ・車輪の再開発されたユーザ関数の、組み込み関数との性能差 ・組み込み関数の成り立ち(C言語由来?) こうなります。 組み込み関数を検索する際の、自分の検索能力を鍛えるべきなのか、 車輪の再開発することになることを想定し、その再開発能力を鍛えるべきなのか、 どなたかに、何らかのアドバイスをして頂けると嬉しく思います。 (そもそも、組み込み関数に適当な関数があるかどうかを、皆さんはどのように検索されているのでしょうね…。 私なんかは、リファレンス本をメインに探していたりしますが。) 以上、どうぞよろしくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- php504
- ベストアンサー率42% (926/2160)
- dell_OK
- ベストアンサー率13% (742/5654)
- JavaJavax2
- ベストアンサー率22% (68/305)
- Gotthold
- ベストアンサー率47% (396/832)
関連するQ&A
- PHP 設定ファイルとユーザ定義関数
ある機能を満たすためのライブラリ(lib.php)を作成しました。 このlib.phpはユーザ定義関数の寄せ集めです。 それぞれのユーザ定義関数では、設定ファイル(config.php)に記述されている共通変数を利用します。 このconfig.phpなのですが、ユーザ定義関数ごとにincludeする以外の方法はあるでしょうか? lib.php function one() { $hensu1... $hensu2... ...処理; } function two() { $hensu1... ...処理; } .... config.php $hensu1 = 1; $hensu2 = 2; ... という構成です。 function one,function twoでconfig.phpの変数を利用したいのですが、lib.phpの先頭でinclude "config.php"をしてもfunctionの中では変数のスコープが有効にはならず、 lib.php function one() { include "config.php"; ...処理; } function two() { include "config.php"; ...処理; } としています。 PHP5を使用しています。 function one() { global $hensu1... } としたらよいのでしょうか? どなたかアドバイスいただけますと幸いです。 よろしくお願いします。
- ベストアンサー
- PHP
- VBAユーザー関数を外部から制御
ExcelのVBAで、標準モジュールにワークシートで使うユーザー関数を記述しています。 ユーザー関数は、使い勝手を組み込みのワークシート関数と同様にするため、 Application.Volatile (True) で自動再計算するようにしており、数百カ所以上のセルに使用しています。 しかし、他のVBAモジュールでユーザー関数の戻り値が変わるような操作をすると、その都度 数百か所以上が再計算されるため、非常に時間がかかります。 ユーザー関数のApplication.Volatile (False) にすると瞬間で終了する処理が、数分かかる場合も あります。 他のVBAモジュールから、一時的にユーザー関数の処理内容を変更するようなことは可能でしょうか。
- ベストアンサー
- Excel(エクセル)
- データベースのユーザ定義関数について
PHP4.3.1、MySQL4.1.13を使用して、Webアプリケーションを製作しております。 幾つかの参考書籍やこれら情報に関するWebなどを見ていますと、後々データベースが変更になった時を考え、それぞれのデータベース用の関数を利用せずユーザ定義関数で処理した方が良いと書かれていました。 ただ、データーベースの処理と言っても様々な処理があると思いますし、それら全てをユーザ定義関数で置き換えなくてはならないのかな?と疑問(迷い)を感じております。 皆様は、どの様にされていますでしょうか?または、どの様に考えたら良いでしょうか?プログラミングの基本的な事かもしれませんが、どなたかご教授いただけないでしょうか? 宜しくお願いします。
- ベストアンサー
- PHP
- ユーザ関数の呼び出し方法 その2
ユーザ関数の呼び出し方法 http://oshiete1.goo.ne.jp/qa3567728.html で、質問をさせて頂いた者です。 お陰様で、だいぶ出来てきました。 frameで左右に分かれています。 「左がメニュー画面」 「右がデータを表示する画面」 メニュー用のPHPに //処理部分 <?php if($_GET["mode"] == 1){ //処理1のスクリプト include("./ee.php"); ads(); } と、しました。 そうすると 左のメニュー画面にデータが表示されてしまいます。 右のデータを表示する画面に更新したい場合 どのように書けば宜しいですか? --------------- <frame name="hidari" src="aa.php"> <frame name="migi" src="ee.php">
- ベストアンサー
- PHP
- PHPの機能制限
お世話になります 環境はlinux centos6 + php を使っています。 ユーザーにブラウザ上で任意のサーバサイド言語を記述でき、実行できる環境を作ろうと考えています。 ユーザーには悪意のあるユーザーも含まれます。 使用したいものは変数,配列,連想配列、関数はfor,if,foreach,replace系,match系,split,explode 以上のみで他の関数は実行できないようにしたいです php又は他の言語に機能制限みたいなものが存在すれば実現できると思うのですが そのようなものはあるのでしょうか? smarty等のテンプレートエンジンは元々そういう用途のものではないので 思わぬ事故が起きそうでなるべく使用したくありません。 これを実現するには replaceやmatchを駆使してphpの上で動く独自のミニ言語を作る他ないのでしょうか なにか手がかりをご存知の方お教え頂けると嬉しいです。
- ベストアンサー
- PHP
- CPUの違いとクロック数の違いでの性能の差
現在、CPUの買い替えを検討しているのですが Pentium D3.0GHzとCore 2 Duo E4300 1.8Ghzだと 単純に性能だけを見ると処理能力ではどちらが上なのでしょうか? また、処理速度に不満がある場合CPUを変えるのとメモリを増設 するのはどちらのほうが良いのでしょうか?
- ベストアンサー
- デスクトップPC
- ユーザ定義関数の引数にクラスのインスタンスを渡すことは可能?
いつもお世話になっております。 (PHP5.2.5) 質問: ユーザ定義関数の引数に、 「クラスのインスタンス」を渡すことは可能ですか? 例: <?php //クラスをインスタンス化する。(例:PDOクラス) $conn = new PDO($dsn,$user,$pass); //ユーザ定義関数に上記のクラスのインスタンスを与えている user_func($conn); //ユーザ定義関数の定義部 function user_func($conn){ $sql = '~SQL文~'; $stmt = $conn->prepare($sql); : :処理 : } ?> 関数に渡すことのできる引数の型について、 なかなか見つけられず、初歩的な質問をしてしまっているかもしれませんが、 どうぞ宜しくお願い致します。
- ベストアンサー
- PHP
- ユーザ関数function の扱いについて。
おそらくは、初歩的な質問なのだろうとは思いますが、どうぞよろしくお願い致します。 早速ですが、質問に入ります。(PHP4または5での話です。) //関数を定義 function test($a){ $b = $a*100; print $b; return $b; } //テキトーに値を用意して変数に格納 $c = 5; //------------------------ 作った関数を使ってみる //------------------------ //(その1)関数内の処理結果をprintしてくれるものと思って使っている。 test($c); //------------------------- //(その2)関数内の処理結果の戻り値を変数$dで受け、それをprint。 //「その1」との違いを調べたくて、こんなことをしている。 $d = test($c); print $d; //------------------------------- さて、何が言いたいかと言いますと(笑)、 まず、上記(その2)に着目して頂いて、 関数定義の中でprint()を使用している関数に対し、 その定義の中にreturnがあるからと、 $dでその戻り値を受けているわけですが、 この場合、print()で出力した値は、一体、どこへ行ってしまったのでしょうか。 このような質問のしかたをしていますが、 分からないのは、この辺りの処理の流れ全体なんです。 つまり、print()したものがどうなったのかだけが知りたいわけではなく、 ユーザ関数内のprintとreturnの関係とか、そのあたりです。(笑) return; が来たら関数内の処理を抜ける、 ということは分かっています。 以上、1つずつ順を追って説明して頂けると助かります。 //-------------------補足------------ //新たに関数を定義 function test2($a){ $b = $a*100; print $b; } $e = 5; $f = test2($e); //returnのない関数から戻り値を受け取ろうとしてもダメ //ということは、こんな私にでも分かっています。 //---------------------------- 以上、よろしくお願いします。
- ベストアンサー
- PHP
- エクセルのユーザーフォームでVLOOKUPと同じ機能をするには?
エクセルのユーザーフォームで、VLOOKUP関数と同じ機能を持たせるには、どうすればいいですか?マクロ初心者なので、わかりません。 そして、ユーザーフォームで検索したものを別のシートのセルに 反映させる方法も教えて下さい。よろしくお願いします。 たとえば、エクセルで住所、名前等の名簿から、ユーザーフォームで検索し、検索したデータを、年賀状はがき等の作成した様式に反映させるといった感じのもの何ですけど・・・。
- 締切済み
- オフィス系ソフト
お礼
冒頭を読み、 改めて、ホゲホゲさんは優しい方なのだなぁと、感じました。 では、本題へ。 >ありがちなのが配列操作だったりしますが、array_***という名前で大量に関数あります。 まさに。(笑) 質問の発端は、このあたりにあります。 あまりの鋭さに、ドキっとしました。^^; >ユーザ投稿部分は凄く参考になるので、目を通してみるのがオススメ はい◎ 努力します! 英語と仲良くします。笑 >googleですげー調べる 「すげー」が印象的でした。ほっ、ホゲホゲさんっ…。 >自分で考えてることなんて、大概誰かが4000年前に通り過ぎてるとおもいつつ この考え方、いいですね。笑 なぜか、ラーメンマンが頭に浮かびましたが、とても頷けるお話でした。 >参考になるものが出てくるまで単語組み替えて調べて見るというのが良い はい、目を皿のようにして、すげー探し回るように致します。 >似たようなシステムのオープンソースとか、ライブラリとか誰かが作った製作物を眺める はい、4000年の歴史を紐解いて参ります。 >php editorがオススメです 実は、エディタについても、気になっていたんですよね~。 私は現在、dreamweaverCS3を使っていますが、 php editorの使用経験もあります。 使用経験というより、試用経験ですが。笑 あと、Notepad++というエディタなんかもDLしてみました。 こちらはご存知かもしれませんが、 コーディングスタイルを色々なデザインの中から選べたりして、 なかなか面白いエディタです。 また、ifやwhile等の開始と終了を分かりやすく表示してくれる機能などもあります。 (DWにも、このような機能があれば良いのに…。) というわけで、教えて頂いた通りに、まずはやってみようと思います! どうもありがとうございました!