<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/phar.using.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ja',
  ),
  'this' => 
  array (
    0 => 'phar.using.object.php',
    1 => 'Phar アーカイブの使用法: Phar クラスおよび PharData クラス',
    2 => 'Phar アーカイブの使用法: Phar クラスおよび PharData クラス',
  ),
  'up' => 
  array (
    0 => 'phar.using.php',
    1 => 'Phar アーカイブの使用法',
  ),
  'prev' => 
  array (
    0 => 'phar.using.stream.php',
    1 => 'Phar アーカイブの使用法: phar ストリームラッパー',
  ),
  'next' => 
  array (
    0 => 'phar.creating.php',
    1 => 'Phar アーカイブの作成',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ja',
    'path' => 'reference/phar/using.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="phar.using.object" class="section">
 <h2 class="title">Phar アーカイブの使用法: Phar クラスおよび PharData クラス</h2>
 <p class="para">
  <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> クラスは Phar アーカイブの読み込みや操作をサポートしています。
  また <span class="classname"><a href="class.recursivedirectoryiterator.php" class="classname">RecursiveDirectoryIterator</a></span>
  クラスを継承しているため、順次処理も可能です。
  <span class="interfacename"><a href="class.arrayaccess.php" class="interfacename">ArrayAccess</a></span> インターフェイスをサポートしているので、
  Phar アーカイブ内のファイルに対して、
  それがまるで連想配列であるかのようにアクセスすることができます。
 </p>
 <p class="para">
  <span class="classname"><a href="class.phardata.php" class="classname">PharData</a></span> クラスは <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span>
  を継承したもので、実行可能でない (データ) tar アーカイブおよび
  zip アーカイブなら php.ini で
  <code class="literal">phar.readonly</code>=1 であっても作成/変更できるようになります。
  このクラスでは
  <span class="function"><a href="phardata.setalias.php" class="function">PharData::setAlias()</a></span> と <span class="function"><a href="phardata.setstub.php" class="function">PharData::setStub()</a></span>
  は使用不可能になっています。というのもエイリアスやスタブというのは
  実行可能な phar アーカイブに独特の概念だからです。
 </p>
 <p class="para">
  注意すべき点は、Phar アーカイブを作成する際には
  <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> のコンストラクタに
  フルパスを渡さなければならないということです。
  相対パスでは初期化に失敗します。
 </p>
 <p class="para">
  <code class="literal">$p</code> が、次のように作成した Phar オブジェクトであるとしましょう。
 </p>
 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$p </span><span style="color: #007700">= new </span><span style="color: #0000BB">Phar</span><span style="color: #007700">(</span><span style="color: #DD0000">'/path/to/myphar.phar'</span><span style="color: #007700">, </span><span style="color: #0000BB">0</span><span style="color: #007700">, </span><span style="color: #DD0000">'myphar.phar'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  空の Phar アーカイブが <code class="literal">/path/to/myphar.phar</code>
  に作成されます。もし <code class="literal">/path/to/myphar.phar</code>
  が既に存在する場合は、それを再度オープンします。
  リテラル <code class="literal">myphar.phar</code> は、エイリアスを表します。
  これを用いると、URL で <code class="literal">/path/to/myphar.phar</code>
  を参照する際に次のようにできます。
 </p>
 <p class="para">
  <div class="informalexample">
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">// これらのふたつの file_get_contents() コールが同等となるのは、<br />// /path/to/myphar.phar のマニフェストでエイリアス "myphar.phar"<br />// が明示的に指定されている場合か、先ほどの例のように<br />// Phar オブジェクトを初期化した場合です。<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'phar:///path/to/myphar.phar/whatever.txt'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$f </span><span style="color: #007700">= </span><span style="color: #0000BB">file_get_contents</span><span style="color: #007700">(</span><span style="color: #DD0000">'phar://myphar.phar/whatever.txt'</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

  </div>
 </p>
 <p class="para">
  新しく作成した <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> オブジェクト
  <code class="literal">$p</code> に対して、次のような処理が可能となります。
  <ul class="itemizedlist">
   <li class="listitem">
    <span class="simpara">
     <code class="literal">$a = $p[&#039;file.php&#039;]</code> とすると、
     <code class="literal">phar://myphar.phar/file.php</code> の中身を参照する
     <span class="classname"><a href="class.pharfileinfo.php" class="classname">PharFileInfo</a></span> クラスが作成されます。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">$p[&#039;file.php&#039;] = $v</code> とすると、
     <code class="literal">myphar.phar</code> の中に新しいファイル
     (<code class="literal">phar://myphar.phar/file.php</code>)
     を作成するか、あるいは同名のファイルを上書きします。
     <code class="literal">$v</code> には、文字列あるいはファイルポインタのいずれかを指定できます。
     ファイルポインタを指定した場合は、その中身全体をもとにして新しいファイルを作成します。
     <code class="literal">$p-&gt;addFromString(&#039;file.php&#039;, $v)</code> は、
     機能的に上と同じであることに注意しましょう。また、ファイルの中身を
     <code class="literal">$p-&gt;addFile(&#039;/path/to/file.php&#039;, &#039;file.php&#039;)</code>
     で追加することもできます。最後に、空のディレクトリを作成するには
     <code class="literal">$p-&gt;addEmptyDir(&#039;empty&#039;)</code> とします。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">isset($p[&#039;file.php&#039;])</code>
     とすると、<code class="literal">phar://myphar.phar/file.php</code> が
     <code class="literal">myphar.phar</code> の中に存在するかどうかがわかります。
    </span>
   </li>
   <li class="listitem">
    <span class="simpara">
     <code class="literal">unset($p[&#039;file.php&#039;])</code> とすると、
     <code class="literal">phar://myphar.phar/file.php</code> を
     <code class="literal">myphar.phar</code> から削除します。
    </span>
   </li>
  </ul>
 </p>
 <p class="para">
  さらに、Phar 固有のメタデータにアクセスするためには
  <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> オブジェクトを使用することが唯一の方法となります。そのためには
  <span class="function"><a href="phar.getmetadata.php" class="function">Phar::getMetadata()</a></span>
  を使用します。また、Phar アーカイブの PHP ローダスタブを設定したり取得したりするための唯一の方法が
  <span class="function"><a href="phar.getstub.php" class="function">Phar::getStub()</a></span> および
  <span class="function"><a href="phar.setstub.php" class="function">Phar::setStub()</a></span> です。
  また、Phar アーカイブ全体の圧縮を行うには
  <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> クラスが必要となります。
 </p>
 <p class="para">
  <span class="classname"><a href="class.phar.php" class="classname">Phar</a></span> オブジェクトの全機能の一覧については、以下で説明します。
 </p>
 <p class="para">
  <span class="classname"><a href="class.pharfileinfo.php" class="classname">PharFileInfo</a></span> クラスは
  <span class="classname"><a href="class.splfileinfo.php" class="classname">SplFileInfo</a></span>
  クラスを継承しており、Phar 内のファイルについての Phar
  固有の情報 (圧縮情報やメタデータなど) を扱うためのメソッドが追加されています。
 </p>
</div><?php manual_footer($setup); ?>