cvs: phpdoc-ja /internals2/buildsys configunix.xml configwin.xml skeleton.xml /internals2/structure globals.xml

From: Date: Sat, 17 May 2008 07:50:28 +0000
Subject: cvs: phpdoc-ja /internals2/buildsys configunix.xml configwin.xml skeleton.xml /internals2/structure globals.xml
Groups: php.doc.ja 
Request: Send a blank email to doc-ja+get-2331@lists.php.net to get a copy of this message
takagi Sat May 17 07:50:28 2008 UTC Modified files: /phpdoc-ja/internals2/structure globals.xml /phpdoc-ja/internals2/buildsys skeleton.xml configwin.xml configunix.xml Log: sync with en.

http://cvs.php.net/viewvc.cgi/phpdoc-ja/internals2/structure/globals.xml?r1=1.1&r2=1.2&diff_format=u Index: phpdoc-ja/internals2/structure/globals.xml diff -u phpdoc-ja/internals2/structure/globals.xml:1.1 phpdoc-ja/internals2/structure/globals.xml:1.2 --- phpdoc-ja/internals2/structure/globals.xml:1.1 Sun Aug 12 04:23:55 2007 +++ phpdoc-ja/internals2/structure/globals.xml Sat May 17 07:50:28 2008 @@ -1,9 +1,78 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.1 $ --> -<!-- EN-Revision: 1.1 Maintainer: takagi Status: ready --> +<!-- $Revision: 1.2 $ --> +<!-- EN-Revision: 1.2 Maintainer: takagi Status: ready --> <sect1 xml:id="internals2.structure.globals" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>拡張モジュールのグローバル変数</title> - <para/> + + <sect2 xml:id="internals2.structure.globals.intro"> + <title>PHP 拡張モジュールのグローバル変数とは</title> + + <simpara> + C のような言語における "グローバル" 変数とは、 + 特別な宣言をしなくてもすべての関数からアクセスできる変数のことです。 + この昔ながらのグローバル変数には、いくつかの弱点があります。 + </simpara> + <itemizedlist> + <listitem> + <simpara> + コンパイラに特別なオプションを設定しない限り、 + グローバル変数はプログラム内の任意の場所からアクセスしたり変更したりできるようになります。 + 実際にコード中でそれが必要になるかどうかにかかわらずです。 + </simpara> + </listitem> + <listitem> + <simpara> + 標準的なグローバル変数はスレッドセーフではありません。 + </simpara> + </listitem> + <listitem> + <simpara> + 変数そのものだけでなく、グローバル変数の名前もグローバルとなります。 + </simpara> + </listitem> + </itemizedlist> + <simpara> + PHP 拡張モジュールのグローバル変数は、どちらかというと + "extension state (拡張モジュールの状態)" と呼んだほうが適切でしょう。 + ほとんどのモジュールは、関数コールの間に自分が何をしているのかを覚えておく必要があるからです。 + "counter" 拡張モジュールは、その最たる例でしょう。 + 基本インターフェイスでは、カウンタの値を永続化させています。 + Zend や PHP にあまりなじみのないプログラマのみなさんは、<filename>counter.c</filename> + で値を保存するときにこんな風にしてしまいがちです。 + </simpara> + <example xml:id="internals2.structure.globals.intro.wrong-way"> + <title>カウンタの基本インターフェイスで値を保存するときの間違った方法</title> + <programlisting role="c"> +<![CDATA[ +/* ... */ +static long basic_counter_value; + +/* ... */ + +PHP_FUNCTION(counter_get) +{ + RETURN_LONG(basic_counter_value); +} +]]> + </programlisting> + </example> + <simpara> + 上っ面だけ見ればこれは正しそうに見えるでしょうし、 + 実際のところ単純なテストでは正しく動作します。 + しかし、複数の PHP が同一スレッドで動作することもよくあります。 + そんな場合は counter モジュールの複数のインスタンスが存在することになります。 + そして複数のスレッドが同じカウンタの値を共有することになりますが、 + これが望ましい結果でないことは明らかです。 + さらに別の問題もあります。別の拡張モジュールが + ある日たまたま同じ名前のグローバル変数を持つことになったとしましょう。 + C のスコープの規則では、この場合コンパイルが失敗してしまう可能性があります。 + さらに悪いことに、実行時エラーとなる可能性もあります。 + 少し頭を使う必要があるでしょう。 + そこで Zend では、スレッドセーフなモジュール単位のグローバル変数をサポートしています。 + </simpara> + + </sect2> + </sect1> <!-- Keep this comment at the end of the file http://cvs.php.net/viewvc.cgi/phpdoc-ja/internals2/buildsys/skeleton.xml?r1=1.3&r2=1.4&diff_format=u Index: phpdoc-ja/internals2/buildsys/skeleton.xml diff -u phpdoc-ja/internals2/buildsys/skeleton.xml:1.3 phpdoc-ja/internals2/buildsys/skeleton.xml:1.4 --- phpdoc-ja/internals2/buildsys/skeleton.xml:1.3 Mon Jul 2 14:56:14 2007 +++ phpdoc-ja/internals2/buildsys/skeleton.xml Sat May 17 07:50:28 2008 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.3 $ --> -<!-- EN-Revision: 1.3 Maintainer: takagi Status: ready --> +<!-- $Revision: 1.4 $ --> +<!-- EN-Revision: 1.4 Maintainer: takagi Status: ready --> <sect1 xml:id="internals2.buildsys.skeleton" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>ext_skel スクリプト</title> <para> @@ -30,8 +30,7 @@ (not yet implemented) --no-help don't try to be nice and create comments in the code and helper functions to test if the module compiled -]]> - </screen> +]]></screen> 一般に、新しい拡張モジュールを開発する際に使うであろうパラメータは <literal>--extname</literal> と <literal>--no-help</literal> のみです。 http://cvs.php.net/viewvc.cgi/phpdoc-ja/internals2/buildsys/configwin.xml?r1=1.4&r2=1.5&diff_format=u Index: phpdoc-ja/internals2/buildsys/configwin.xml diff -u phpdoc-ja/internals2/buildsys/configwin.xml:1.4 phpdoc-ja/internals2/buildsys/configwin.xml:1.5 --- phpdoc-ja/internals2/buildsys/configwin.xml:1.4 Mon May 5 01:51:36 2008 +++ phpdoc-ja/internals2/buildsys/configwin.xml Sat May 17 07:50:28 2008 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.4 $ --> -<!-- EN-Revision: 1.4 Maintainer: takagi Status: ready --> +<!-- $Revision: 1.5 $ --> +<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready --> <sect1 xml:id="internals2.buildsys.configwin" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>Windows 用のビルドシステム: config.w32</title> <para> @@ -16,10 +16,9 @@ <example xml:id="internals2.buildsys.configwin.sample-config"> <title>config.w32 ファイルのサンプル</title> <programlisting role="javascript"> -<![CDATA[ -// ]]>&#x24;<![CDATA[Id$ +// &#x24;Id$ // vim:ft=javascript - +<![CDATA[ ARG_WITH("example", "for example support", "no"); ARG_ENABLE("example-debug", "for debugging support in example", "no") ARG_WITH("example-extra", "for extra functionality in example", "no") @@ -62,10 +61,9 @@ <example xml:id="internals2.buildsys.configwin.counter.configwin"> <title>counter の config.w32 ファイル</title> <programlisting role="autoconf"> -<![CDATA[ -// ]]>&#x24;<![CDATA[Id$ +// &#x24;Id$ // vim:ft=javascript - +<![CDATA[ ARG_ENABLE("counter", "for counter support", "no"); if (PHP_COUNTER != "no") { EXTENSION("counter", "counter.c"); http://cvs.php.net/viewvc.cgi/phpdoc-ja/internals2/buildsys/configunix.xml?r1=1.2&r2=1.3&diff_format=u Index: phpdoc-ja/internals2/buildsys/configunix.xml diff -u phpdoc-ja/internals2/buildsys/configunix.xml:1.2 phpdoc-ja/internals2/buildsys/configunix.xml:1.3 --- phpdoc-ja/internals2/buildsys/configunix.xml:1.2 Mon May 5 01:51:36 2008 +++ phpdoc-ja/internals2/buildsys/configunix.xml Sat May 17 07:50:28 2008 @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="utf-8"?> -<!-- $Revision: 1.2 $ --> -<!-- EN-Revision: 1.4 Maintainer: takagi Status: ready --> +<!-- $Revision: 1.3 $ --> +<!-- EN-Revision: 1.5 Maintainer: takagi Status: ready --> <sect1 xml:id="internals2.buildsys.configunix" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"> <title>UNIX 用のビルドシステム: config.m4</title> <para> @@ -27,10 +27,9 @@ <example xml:id="internals2.buildsys.configunix.sample-config"> <title>config.m4 ファイルの例</title> <programlisting role="autoconf"> -<![CDATA[ -dnl ]]>&#x24;<![CDATA[Id$ +dnl &#x24;Id$ dnl config.m4 for extension example - +<![CDATA[ PHP_ARG_WITH(example, for example support, [ --with-example[=FILE] Include example support. File is the optional path to example-config]) PHP_ARG_ENABLE(example-debug, whether to enable debugging support in example,
« previous php.doc.ja (#2331) next »