• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:PHPで関数をCのように使いたい)

PHPで関数をCのように使いたい

このQ&Aのポイント
  • PHP言語において、関数をCのように使用する方法について教えてください。
  • 特に、main関数とpictChange関数の分離や、画像データのメモリ開放処理についての方法を知りたいです。
  • PHPでの分岐と再帰処理に関しても、詳しい情報を教えていただけると助かります。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

| わからないことは今まで1つのファイルにまとめてプログラムを | 書いていたため、PHPのように分離して書く際にファイルの | 変数の受け渡し方がわからないのです。 | 外部の変数を渡したり、外部から変数を受け取ったり、 | $_POSTとはまた違う処理だと考えていますので。。。 | もう少し頑張ってみます。ありがとうございました。 これでも何を聞きたいのか完全には理解していないのですが、次のどれかでしょうか? a. PHPにおける変数の有効範囲 b. PHPでファイルポインターを他の関数に渡す方法 c. PHPで別ファイルにある関数で何かの処理した結果を返す方法 C言語でもある程度以上の規模のプログラムを書く場合は複数のファイルに分けて書くのが普通で、分割して書くというのはC言語でも普通にある状況だと思います。C言語の場合、ヘッダファイルをincludeして、別々に書かれた.cファイルはコンパイル後、リンク時につなげ、質問文でやるようなことをする場合はポインターを渡すのが普通だと思います。グローバル変数は変数の有効範囲を不用意に広げることになるのでerrnoなどの特別な場合を除き、C言語でも使わないのが普通だと思います。 aについては、次のドキュメントを読むとよいでしょう。ちなみに、変数の有効範囲のことをスコープといいます。 http://php.net/manual/ja/language.variables.scope.php b、cについては先に述べた参照渡しを使えば良いと思います。あるいは、cについては処理結果を関数の返り値として返しても良いでしょう。ガーベッジコレクションがあるシステムなのでこういうことをしてもメモリーリークすることはありません。 では、頑張って。

-q7P2izb__
質問者

お礼

ありがとうございます。 問の答えは、 c. PHPで別ファイルにある関数で何かの処理した結果を返す方法 でした。 今までC言語を習いましたがメモリリークや、リンカなどの 知識なしでよく4年以上も続いたなという感じです。 (その頃は、1つのファイルに全部を書いてました) 今は同時にJavaもやっていますので、少し分かってきました。 頑張ってみます。手厚いフォローありがとうございました。

その他の回答 (1)

回答No.1

書いてある文面からあなたが何を聞きたいのか理解するのはかなり困難でしたが、こういうことを聞いているのでしょうか? 1. PHPで参照渡しをする方法 2. PHPでのメモリーの解放の方法 まず、1から答えます。参照渡しというのは厳密にはC言語に無い機能ですが、ポインターを渡すことでよく行われると思います。 一応確認ですが、こういうことをしたいんですよね? void minus1(int *value) { *value -= 1; } int main(void) { int a = 10; minus1(&a); return 0; }; PHPには参照渡しの方法があるので、それを使います。 function pictChange(&$image) { ... } のように関数の引数で&をつけて宣言すると、参照渡しになります。詳しくは次を見てみてください。 http://php.net/manual/ja/language.references.pass.php 次に2について答えます。PHPには ガーベッジコレクション(garbage collection) の機能があるので、C言語のように自分でメモリーを確保、解放する必要はありません。 オブジェクトがどこからも参照されなくなったあと、ルート・バッファが満杯になるかgc_collect_cyclesが呼ばれるかすると自動的に解放されます。 http://php.net/manual/ja/function.gc-collect-cycles.php 一応、PHPではgc_collect_cyclesという関数が用意されていますが、PHPにかぎらずガーベッジコレクションが実装されているシステムでは、普通、ユーザーから明示的にメモリーの解放を指示する必要はありません。下記にも書かれている通り、かえって性能が下がります。 http://php.net/manual/ja/features.gc.performance-considerations.php PHPのガーベッジコレクションについては下記からリンクを辿って読んでいってみてください。 http://php.net/manual/ja/features.gc.php では、頑張って。

-q7P2izb__
質問者

お礼

お礼が遅くなってしまい、申し訳ありません。 自分のやりたいことを説明するのが下手なので、 いつも何か不足して伝わらないことが多々あります。 その点も深くお詫び申し上げます。 2のガーベッジコレクションについてはよく分かりました。 1の参照渡しについては只今リファレンスを読んでおります。 わからないことは今まで1つのファイルにまとめてプログラムを 書いていたため、PHPのように分離して書く際にファイルの 変数の受け渡し方がわからないのです。 外部の変数を渡したり、外部から変数を受け取ったり、 $_POSTとはまた違う処理だと考えていますので。。。 もう少し頑張ってみます。ありがとうございました。

関連するQ&A