You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by bu...@apache.org on 2014/03/23 03:10:26 UTC
svn commit: r903073 [2/3] - in /websites/staging/thrift/trunk/content: ./
tutorial/ocaml.html tutorial/perl.html tutorial/php.html tutorial/py.html
tutorial/rb.html
Modified: websites/staging/thrift/trunk/content/tutorial/php.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/php.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/php.html Sun Mar 23 02:10:26 2014
@@ -86,18 +86,25 @@
</ol>
<h3 id="prerequisites">Prerequisites</h3>
<h3 id="client">Client</h3>
-<p><div class="codehilite"><pre><span class="cp"><?php</span></p>
-<p><span class="k">namespace</span> <span class="nx">tutorial\php</span><span class="p">;</span></p>
-<p><span class="nb">error_reporting</span><span class="p">(</span><span class="k">E_ALL</span><span class="p">);</span></p>
-<p><span class="k">require_once</span> <span class="nx"><strong>DIR</strong></span><span class="o">.</span><span class="s1">'/../../lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php'</span><span class="p">;</span></p>
-<p><span class="k">use</span> <span class="nx">Thrift\ClassLoader\ThriftClassLoader</span><span class="p">;</span></p>
-<p><span class="nv">$GEN_DIR</span> <span class="o">=</span> <span class="nb">realpath</span><span class="p">(</span><span class="nb">dirname</span><span class="p">(</span><span class="k"><strong>FILE</strong></span><span class="p">)</span><span class="o">.</span><span class="s1">'/..'</span><span class="p">)</span><span class="o">.</span><span class="s1">'/gen-php'</span><span class="p">;</span></p>
-<p><span class="nv">$loader</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ThriftClassLoader</span><span class="p">();</span>
-<span class="nv">$loader</span><span class="o">-></span><span class="na">registerNamespace</span><span class="p">(</span><span class="s1">'Thrift'</span><span class="p">,</span> <span class="nx"><strong>DIR</strong></span> <span class="o">.</span> <span class="s1">'/../../lib/php/lib'</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="cp"><?php</span>
+
+<span class="k">namespace</span> <span class="nx">tutorial\php</span><span class="p">;</span>
+
+<span class="nb">error_reporting</span><span class="p">(</span><span class="k">E_ALL</span><span class="p">);</span>
+
+<span class="k">require_once</span> <span class="nx">__DIR__</span><span class="o">.</span><span class="s1">'/../../lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php'</span><span class="p">;</span>
+
+<span class="k">use</span> <span class="nx">Thrift\ClassLoader\ThriftClassLoader</span><span class="p">;</span>
+
+<span class="nv">$GEN_DIR</span> <span class="o">=</span> <span class="nb">realpath</span><span class="p">(</span><span class="nb">dirname</span><span class="p">(</span><span class="k">__FILE__</span><span class="p">)</span><span class="o">.</span><span class="s1">'/..'</span><span class="p">)</span><span class="o">.</span><span class="s1">'/gen-php'</span><span class="p">;</span>
+
+<span class="nv">$loader</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ThriftClassLoader</span><span class="p">();</span>
+<span class="nv">$loader</span><span class="o">-></span><span class="na">registerNamespace</span><span class="p">(</span><span class="s1">'Thrift'</span><span class="p">,</span> <span class="nx">__DIR__</span> <span class="o">.</span> <span class="s1">'/../../lib/php/lib'</span><span class="p">);</span>
<span class="nv">$loader</span><span class="o">-></span><span class="na">registerDefinition</span><span class="p">(</span><span class="s1">'shared'</span><span class="p">,</span> <span class="nv">$GEN_DIR</span><span class="p">);</span>
<span class="nv">$loader</span><span class="o">-></span><span class="na">registerDefinition</span><span class="p">(</span><span class="s1">'tutorial'</span><span class="p">,</span> <span class="nv">$GEN_DIR</span><span class="p">);</span>
-<span class="nv">$loader</span><span class="o">-></span><span class="na">register</span><span class="p">();</span></p>
-<p><span class="cm">/<em></span>
+<span class="nv">$loader</span><span class="o">-></span><span class="na">register</span><span class="p">();</span>
+
+<span class="cm">/*</span>
<span class="cm"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="cm"> * or more contributor license agreements. See the NOTICE file</span>
<span class="cm"> * distributed with this work for additional information</span>
@@ -105,22 +112,24 @@
<span class="cm"> * to you under the Apache License, Version 2.0 (the</span>
<span class="cm"> * "License"); you may not use this file except in compliance</span>
<span class="cm"> * with the License. You may obtain a copy of the License at</span>
-<span class="cm"> </em></span>
+<span class="cm"> *</span>
<span class="cm"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<span class="cm"> <em></span>
+<span class="cm"> *</span>
<span class="cm"> * Unless required by applicable law or agreed to in writing,</span>
<span class="cm"> * software distributed under the License is distributed on an</span>
<span class="cm"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
<span class="cm"> * KIND, either express or implied. See the License for the</span>
<span class="cm"> * specific language governing permissions and limitations</span>
<span class="cm"> * under the License.</span>
-<span class="cm"> </em>/</span></p>
-<p><span class="k">use</span> <span class="nx">Thrift\Protocol\TBinaryProtocol</span><span class="p">;</span>
+<span class="cm"> */</span>
+
+<span class="k">use</span> <span class="nx">Thrift\Protocol\TBinaryProtocol</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Thrift\Transport\TSocket</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Thrift\Transport\THttpClient</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Thrift\Transport\TBufferedTransport</span><span class="p">;</span>
-<span class="k">use</span> <span class="nx">Thrift\Exception\TException</span><span class="p">;</span></p>
-<p><span class="k">try</span> <span class="p">{</span>
+<span class="k">use</span> <span class="nx">Thrift\Exception\TException</span><span class="p">;</span>
+
+<span class="k">try</span> <span class="p">{</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">array_search</span><span class="p">(</span><span class="s1">'--http'</span><span class="p">,</span> <span class="nv">$argv</span><span class="p">))</span> <span class="p">{</span>
<span class="nv">$socket</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">THttpClient</span><span class="p">(</span><span class="s1">'localhost'</span><span class="p">,</span> <span class="mi">8080</span><span class="p">,</span> <span class="s1">'/php/PhpServer.php'</span><span class="p">);</span>
<span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
@@ -128,48 +137,67 @@
<span class="p">}</span>
<span class="nv">$transport</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">TBufferedTransport</span><span class="p">(</span><span class="nv">$socket</span><span class="p">,</span> <span class="mi">1024</span><span class="p">,</span> <span class="mi">1024</span><span class="p">);</span>
<span class="nv">$protocol</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">TBinaryProtocol</span><span class="p">(</span><span class="nv">$transport</span><span class="p">);</span>
- <span class="nv">$client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\tutorial\CalculatorClient</span><span class="p">(</span><span class="nv">$protocol</span><span class="p">);</span></p>
-<p><span class="nv">$transport</span><span class="o">-></span><span class="na">open</span><span class="p">();</span></p>
-<p><span class="nv">$client</span><span class="o">-></span><span class="na">ping</span><span class="p">();</span>
- <span class="k">print</span> <span class="s2">"ping()</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span></p>
-<p><span class="nv">$sum</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span>
- <span class="k">print</span> <span class="s2">"1+1=</span><span class="si">$sum</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span></p>
-<p><span class="nv">$work</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\tutorial\Work</span><span class="p">();</span></p>
-<p><span class="nv">$work</span><span class="o">-></span><span class="na">op</span> <span class="o">=</span> <span class="nx">\tutorial\Operation</span><span class="o">::</span><span class="na">DIVIDE</span><span class="p">;</span>
+ <span class="nv">$client</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\tutorial\CalculatorClient</span><span class="p">(</span><span class="nv">$protocol</span><span class="p">);</span>
+
+ <span class="nv">$transport</span><span class="o">-></span><span class="na">open</span><span class="p">();</span>
+
+ <span class="nv">$client</span><span class="o">-></span><span class="na">ping</span><span class="p">();</span>
+ <span class="k">print</span> <span class="s2">"ping()</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span>
+
+ <span class="nv">$sum</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-></span><span class="na">add</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="mi">1</span><span class="p">);</span>
+ <span class="k">print</span> <span class="s2">"1+1=</span><span class="si">$sum</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span>
+
+ <span class="nv">$work</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\tutorial\Work</span><span class="p">();</span>
+
+ <span class="nv">$work</span><span class="o">-></span><span class="na">op</span> <span class="o">=</span> <span class="nx">\tutorial\Operation</span><span class="o">::</span><span class="na">DIVIDE</span><span class="p">;</span>
<span class="nv">$work</span><span class="o">-></span><span class="na">num1</span> <span class="o">=</span> <span class="mi">1</span><span class="p">;</span>
- <span class="nv">$work</span><span class="o">-></span><span class="na">num2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span></p>
-<p><span class="k">try</span> <span class="p">{</span>
+ <span class="nv">$work</span><span class="o">-></span><span class="na">num2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
+
+ <span class="k">try</span> <span class="p">{</span>
<span class="nv">$client</span><span class="o">-></span><span class="na">calculate</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nv">$work</span><span class="p">);</span>
<span class="k">print</span> <span class="s2">"Whoa! We can divide by zero?</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span>
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">\tutorial\InvalidOperation</span> <span class="nv">$io</span><span class="p">)</span> <span class="p">{</span>
<span class="k">print</span> <span class="s2">"InvalidOperation: </span><span class="si">$io->why</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span>
- <span class="p">}</span></p>
-<p><span class="nv">$work</span><span class="o">-></span><span class="na">op</span> <span class="o">=</span> <span class="nx">\tutorial\Operation</span><span class="o">::</span><span class="na">SUBTRACT</span><span class="p">;</span>
+ <span class="p">}</span>
+
+ <span class="nv">$work</span><span class="o">-></span><span class="na">op</span> <span class="o">=</span> <span class="nx">\tutorial\Operation</span><span class="o">::</span><span class="na">SUBTRACT</span><span class="p">;</span>
<span class="nv">$work</span><span class="o">-></span><span class="na">num1</span> <span class="o">=</span> <span class="mi">15</span><span class="p">;</span>
<span class="nv">$work</span><span class="o">-></span><span class="na">num2</span> <span class="o">=</span> <span class="mi">10</span><span class="p">;</span>
<span class="nv">$diff</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-></span><span class="na">calculate</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="nv">$work</span><span class="p">);</span>
- <span class="k">print</span> <span class="s2">"15-10=</span><span class="si">$diff</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span></p>
-<p><span class="nv">$log</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-></span><span class="na">getStruct</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
- <span class="k">print</span> <span class="s2">"Log: </span><span class="si">$log->value</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span></p>
-<p><span class="nv">$transport</span><span class="o">-></span><span class="na">close</span><span class="p">();</span></p>
-<p><span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">TException</span> <span class="nv">$tx</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">print</span> <span class="s2">"15-10=</span><span class="si">$diff</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span>
+
+ <span class="nv">$log</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-></span><span class="na">getStruct</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span>
+ <span class="k">print</span> <span class="s2">"Log: </span><span class="si">$log->value</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span>
+
+ <span class="nv">$transport</span><span class="o">-></span><span class="na">close</span><span class="p">();</span>
+
+<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">TException</span> <span class="nv">$tx</span><span class="p">)</span> <span class="p">{</span>
<span class="k">print</span> <span class="s1">'TException: '</span><span class="o">.</span><span class="nv">$tx</span><span class="o">-></span><span class="na">getMessage</span><span class="p">()</span><span class="o">.</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">;</span>
-<span class="p">}</span></p>
-<p><span class="cp">?></span><span class="x"></span>
-</pre></div></p>
+<span class="p">}</span>
+
+<span class="cp">?></span><span class="x"></span>
+</pre></div>
+
<h3 id="server">Server</h3>
-<p><div class="codehilite"><pre><span class="cp"><?php</span></p>
-<p><span class="k">namespace</span> <span class="nx">tutorial\php</span><span class="p">;</span></p>
-<p><span class="nb">error_reporting</span><span class="p">(</span><span class="k">E_ALL</span><span class="p">);</span></p>
-<p><span class="k">require_once</span> <span class="nx"><strong>DIR</strong></span><span class="o">.</span><span class="s1">'/../../lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php'</span><span class="p">;</span></p>
-<p><span class="k">use</span> <span class="nx">Thrift\ClassLoader\ThriftClassLoader</span><span class="p">;</span></p>
-<p><span class="nv">$GEN_DIR</span> <span class="o">=</span> <span class="nb">realpath</span><span class="p">(</span><span class="nb">dirname</span><span class="p">(</span><span class="k"><strong>FILE</strong></span><span class="p">)</span><span class="o">.</span><span class="s1">'/..'</span><span class="p">)</span><span class="o">.</span><span class="s1">'/gen-php'</span><span class="p">;</span></p>
-<p><span class="nv">$loader</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ThriftClassLoader</span><span class="p">();</span>
-<span class="nv">$loader</span><span class="o">-></span><span class="na">registerNamespace</span><span class="p">(</span><span class="s1">'Thrift'</span><span class="p">,</span> <span class="nx"><strong>DIR</strong></span> <span class="o">.</span> <span class="s1">'/../../lib/php/lib'</span><span class="p">);</span>
+<div class="codehilite"><pre><span class="cp"><?php</span>
+
+<span class="k">namespace</span> <span class="nx">tutorial\php</span><span class="p">;</span>
+
+<span class="nb">error_reporting</span><span class="p">(</span><span class="k">E_ALL</span><span class="p">);</span>
+
+<span class="k">require_once</span> <span class="nx">__DIR__</span><span class="o">.</span><span class="s1">'/../../lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php'</span><span class="p">;</span>
+
+<span class="k">use</span> <span class="nx">Thrift\ClassLoader\ThriftClassLoader</span><span class="p">;</span>
+
+<span class="nv">$GEN_DIR</span> <span class="o">=</span> <span class="nb">realpath</span><span class="p">(</span><span class="nb">dirname</span><span class="p">(</span><span class="k">__FILE__</span><span class="p">)</span><span class="o">.</span><span class="s1">'/..'</span><span class="p">)</span><span class="o">.</span><span class="s1">'/gen-php'</span><span class="p">;</span>
+
+<span class="nv">$loader</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ThriftClassLoader</span><span class="p">();</span>
+<span class="nv">$loader</span><span class="o">-></span><span class="na">registerNamespace</span><span class="p">(</span><span class="s1">'Thrift'</span><span class="p">,</span> <span class="nx">__DIR__</span> <span class="o">.</span> <span class="s1">'/../../lib/php/lib'</span><span class="p">);</span>
<span class="nv">$loader</span><span class="o">-></span><span class="na">registerDefinition</span><span class="p">(</span><span class="s1">'shared'</span><span class="p">,</span> <span class="nv">$GEN_DIR</span><span class="p">);</span>
<span class="nv">$loader</span><span class="o">-></span><span class="na">registerDefinition</span><span class="p">(</span><span class="s1">'tutorial'</span><span class="p">,</span> <span class="nv">$GEN_DIR</span><span class="p">);</span>
-<span class="nv">$loader</span><span class="o">-></span><span class="na">register</span><span class="p">();</span></p>
-<p><span class="cm">/<em></span>
+<span class="nv">$loader</span><span class="o">-></span><span class="na">register</span><span class="p">();</span>
+
+<span class="cm">/*</span>
<span class="cm"> * Licensed to the Apache Software Foundation (ASF) under one</span>
<span class="cm"> * or more contributor license agreements. See the NOTICE file</span>
<span class="cm"> * distributed with this work for additional information</span>
@@ -177,39 +205,46 @@
<span class="cm"> * to you under the Apache License, Version 2.0 (the</span>
<span class="cm"> * "License"); you may not use this file except in compliance</span>
<span class="cm"> * with the License. You may obtain a copy of the License at</span>
-<span class="cm"> </em></span>
+<span class="cm"> *</span>
<span class="cm"> * http://www.apache.org/licenses/LICENSE-2.0</span>
-<span class="cm"> <em></span>
+<span class="cm"> *</span>
<span class="cm"> * Unless required by applicable law or agreed to in writing,</span>
<span class="cm"> * software distributed under the License is distributed on an</span>
<span class="cm"> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY</span>
<span class="cm"> * KIND, either express or implied. See the License for the</span>
<span class="cm"> * specific language governing permissions and limitations</span>
<span class="cm"> * under the License.</span>
-<span class="cm"> </em>/</span></p>
-<p><span class="cm">/<em></span>
+<span class="cm"> */</span>
+
+<span class="cm">/*</span>
<span class="cm"> * This is not a stand-alone server. It should be run as a normal</span>
<span class="cm"> * php web script (like through Apache's mod_php) or as a cgi script</span>
<span class="cm"> * (like with the included runserver.py). You can connect to it with</span>
<span class="cm"> * THttpClient in any language that supports it. The PHP tutorial client</span>
<span class="cm"> * will work if you pass it the argument "--http".</span>
-<span class="cm"> </em>/</span></p>
-<p><span class="k">if</span> <span class="p">(</span><span class="nb">php_sapi_name</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'cli'</span><span class="p">)</span> <span class="p">{</span>
+<span class="cm"> */</span>
+
+<span class="k">if</span> <span class="p">(</span><span class="nb">php_sapi_name</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'cli'</span><span class="p">)</span> <span class="p">{</span>
<span class="nb">ini_set</span><span class="p">(</span><span class="s2">"display_errors"</span><span class="p">,</span> <span class="s2">"stderr"</span><span class="p">);</span>
-<span class="p">}</span></p>
-<p><span class="k">use</span> <span class="nx">Thrift\Protocol\TBinaryProtocol</span><span class="p">;</span>
+<span class="p">}</span>
+
+<span class="k">use</span> <span class="nx">Thrift\Protocol\TBinaryProtocol</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">Thrift\Transport\TPhpStream</span><span class="p">;</span>
-<span class="k">use</span> <span class="nx">Thrift\Transport\TBufferedTransport</span><span class="p">;</span></p>
-<p><span class="k">class</span> <span class="nc">CalculatorHandler</span> <span class="k">implements</span> <span class="nx">\tutorial\CalculatorIf</span> <span class="p">{</span>
- <span class="k">protected</span> <span class="nv">$log</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span></p>
-<p><span class="k">public</span> <span class="k">function</span> <span class="nf">ping</span><span class="p">()</span> <span class="p">{</span>
+<span class="k">use</span> <span class="nx">Thrift\Transport\TBufferedTransport</span><span class="p">;</span>
+
+<span class="k">class</span> <span class="nc">CalculatorHandler</span> <span class="k">implements</span> <span class="nx">\tutorial\CalculatorIf</span> <span class="p">{</span>
+ <span class="k">protected</span> <span class="nv">$log</span> <span class="o">=</span> <span class="k">array</span><span class="p">();</span>
+
+ <span class="k">public</span> <span class="k">function</span> <span class="nf">ping</span><span class="p">()</span> <span class="p">{</span>
<span class="nb">error_log</span><span class="p">(</span><span class="s2">"ping()"</span><span class="p">);</span>
- <span class="p">}</span></p>
-<p><span class="k">public</span> <span class="k">function</span> <span class="nf">add</span><span class="p">(</span><span class="nv">$num1</span><span class="p">,</span> <span class="nv">$num2</span><span class="p">)</span> <span class="p">{</span>
+ <span class="p">}</span>
+
+ <span class="k">public</span> <span class="k">function</span> <span class="nf">add</span><span class="p">(</span><span class="nv">$num1</span><span class="p">,</span> <span class="nv">$num2</span><span class="p">)</span> <span class="p">{</span>
<span class="nb">error_log</span><span class="p">(</span><span class="s2">"add(</span><span class="si">{</span><span class="nv">$num1</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="nv">$num2</span><span class="si">}</span><span class="s2">)"</span><span class="p">);</span>
<span class="k">return</span> <span class="nv">$num1</span> <span class="o">+</span> <span class="nv">$num2</span><span class="p">;</span>
- <span class="p">}</span></p>
-<p><span class="k">public</span> <span class="k">function</span> <span class="nf">calculate</span><span class="p">(</span><span class="nv">$logid</span><span class="p">,</span> <span class="nx">\tutorial\Work</span> <span class="nv">$w</span><span class="p">)</span> <span class="p">{</span>
+ <span class="p">}</span>
+
+ <span class="k">public</span> <span class="k">function</span> <span class="nf">calculate</span><span class="p">(</span><span class="nv">$logid</span><span class="p">,</span> <span class="nx">\tutorial\Work</span> <span class="nv">$w</span><span class="p">)</span> <span class="p">{</span>
<span class="nb">error_log</span><span class="p">(</span><span class="s2">"calculate(</span><span class="si">{</span><span class="nv">$logid</span><span class="si">}</span><span class="s2">, {{$w->op}, </span><span class="si">{</span><span class="nv">$w</span><span class="o">-></span><span class="na">num1</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="nv">$w</span><span class="o">-></span><span class="na">num2</span><span class="si">}</span><span class="s2">})"</span><span class="p">);</span>
<span class="k">switch</span> <span class="p">(</span><span class="nv">$w</span><span class="o">-></span><span class="na">op</span><span class="p">)</span> <span class="p">{</span>
<span class="k">case</span> <span class="nx">\tutorial\Operation</span><span class="o">::</span><span class="na">ADD</span><span class="o">:</span>
@@ -235,40 +270,46 @@
<span class="nv">$io</span><span class="o">-></span><span class="na">what</span> <span class="o">=</span> <span class="nv">$w</span><span class="o">-></span><span class="na">op</span><span class="p">;</span>
<span class="nv">$io</span><span class="o">-></span><span class="na">why</span> <span class="o">=</span> <span class="s2">"Invalid Operation"</span><span class="p">;</span>
<span class="k">throw</span> <span class="nv">$io</span><span class="p">;</span>
- <span class="p">}</span></p>
-<div class="codehilite"><pre><span class="nt"><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">log</span><span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>new<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>\shared\SharedStruct<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>();<span class="nt"></span></span>
-<span class="nt"><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">log</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>-<span class="ni">&gt;</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"na"</span><span class="nt">></span>key<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">logid</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><spa
n class="nt">></span>;<span class="nt"></span></span>
-<span class="nt"><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">log</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>-<span class="ni">&gt;</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"na"</span><span class="nt">></span>value<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>(<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nx"</span><span class="nt">></span>string<span class="nt"><
;/span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>)<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">val</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
-<span class="nt"><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">this</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>-<span class="ni">&gt;</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"na"</span><span class="nt">></span>log<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>[<span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">logid</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>]<span class="nt"></sp
an></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"o"</span><span class="nt">></span>=<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">log</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
+ <span class="p">}</span>
-<span class="nt"><span</span> <span class="na">class=</span><span class="s">"k"</span><span class="nt">></span>return<span class="nt"></span></span> <span class="nt"><span</span> <span class="na">class=</span><span class="s">"nv"</span><span class="nt">></span><span class="p">$</span><span class="nv">val</span><span class="nt"></span><span</span> <span class="na">class=</span><span class="s">"p"</span><span class="nt">></span>;<span class="nt"></span></span>
-</pre></div>
+ <span class="nv">$log</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\shared\SharedStruct</span><span class="p">();</span>
+ <span class="nv">$log</span><span class="o">-></span><span class="na">key</span> <span class="o">=</span> <span class="nv">$logid</span><span class="p">;</span>
+ <span class="nv">$log</span><span class="o">-></span><span class="na">value</span> <span class="o">=</span> <span class="p">(</span><span class="nx">string</span><span class="p">)</span><span class="nv">$val</span><span class="p">;</span>
+ <span class="nv">$this</span><span class="o">-></span><span class="na">log</span><span class="p">[</span><span class="nv">$logid</span><span class="p">]</span> <span class="o">=</span> <span class="nv">$log</span><span class="p">;</span>
+ <span class="k">return</span> <span class="nv">$val</span><span class="p">;</span>
+ <span class="p">}</span>
-<p><span class="p">}</span></p>
-<p><span class="k">public</span> <span class="k">function</span> <span class="nf">getStruct</span><span class="p">(</span><span class="nv">$key</span><span class="p">)</span> <span class="p">{</span>
+ <span class="k">public</span> <span class="k">function</span> <span class="nf">getStruct</span><span class="p">(</span><span class="nv">$key</span><span class="p">)</span> <span class="p">{</span>
<span class="nb">error_log</span><span class="p">(</span><span class="s2">"getStruct(</span><span class="si">{</span><span class="nv">$key</span><span class="si">}</span><span class="s2">)"</span><span class="p">);</span>
<span class="c1">// This actually doesn't work because the PHP interpreter is</span>
<span class="c1">// restarted for every request.</span>
<span class="c1">//return $this->log[$key];</span>
<span class="k">return</span> <span class="k">new</span> <span class="nx">\shared\SharedStruct</span><span class="p">(</span><span class="k">array</span><span class="p">(</span><span class="s2">"key"</span> <span class="o">=></span> <span class="nv">$key</span><span class="p">,</span> <span class="s2">"value"</span> <span class="o">=></span> <span class="s2">"PHP is stateless!"</span><span class="p">));</span>
- <span class="p">}</span></p>
-<p><span class="k">public</span> <span class="k">function</span> <span class="nf">zip</span><span class="p">()</span> <span class="p">{</span>
+ <span class="p">}</span>
+
+ <span class="k">public</span> <span class="k">function</span> <span class="nf">zip</span><span class="p">()</span> <span class="p">{</span>
<span class="nb">error_log</span><span class="p">(</span><span class="s2">"zip()"</span><span class="p">);</span>
- <span class="p">}</span></p>
-<p><span class="p">};</span></p>
-<p><span class="nx">header</span><span class="p">(</span><span class="s1">'Content-Type'</span><span class="p">,</span> <span class="s1">'application/x-thrift'</span><span class="p">);</span>
+ <span class="p">}</span>
+
+<span class="p">};</span>
+
+<span class="nx">header</span><span class="p">(</span><span class="s1">'Content-Type'</span><span class="p">,</span> <span class="s1">'application/x-thrift'</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">php_sapi_name</span><span class="p">()</span> <span class="o">==</span> <span class="s1">'cli'</span><span class="p">)</span> <span class="p">{</span>
<span class="k">echo</span> <span class="s2">"</span><span class="se">\r\n</span><span class="s2">"</span><span class="p">;</span>
-<span class="p">}</span></p>
-<p><span class="nv">$handler</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">CalculatorHandler</span><span class="p">();</span>
-<span class="nv">$processor</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\tutorial\CalculatorProcessor</span><span class="p">(</span><span class="nv">$handler</span><span class="p">);</span></p>
-<p><span class="nv">$transport</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">TBufferedTransport</span><span class="p">(</span><span class="k">new</span> <span class="nx">TPhpStream</span><span class="p">(</span><span class="nx">TPhpStream</span><span class="o">::</span><span class="na">MODE_R</span> <span class="o">|</span> <span class="nx">TPhpStream</span><span class="o">::</span><span class="na">MODE_W</span><span class="p">));</span>
-<span class="nv">$protocol</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">TBinaryProtocol</span><span class="p">(</span><span class="nv">$transport</span><span class="p">,</span> <span class="k">true</span><span class="p">,</span> <span class="k">true</span><span class="p">);</span></p>
-<p><span class="nv">$transport</span><span class="o">-></span><span class="na">open</span><span class="p">();</span>
+<span class="p">}</span>
+
+<span class="nv">$handler</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">CalculatorHandler</span><span class="p">();</span>
+<span class="nv">$processor</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\tutorial\CalculatorProcessor</span><span class="p">(</span><span class="nv">$handler</span><span class="p">);</span>
+
+<span class="nv">$transport</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">TBufferedTransport</span><span class="p">(</span><span class="k">new</span> <span class="nx">TPhpStream</span><span class="p">(</span><span class="nx">TPhpStream</span><span class="o">::</span><span class="na">MODE_R</span> <span class="o">|</span> <span class="nx">TPhpStream</span><span class="o">::</span><span class="na">MODE_W</span><span class="p">));</span>
+<span class="nv">$protocol</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">TBinaryProtocol</span><span class="p">(</span><span class="nv">$transport</span><span class="p">,</span> <span class="k">true</span><span class="p">,</span> <span class="k">true</span><span class="p">);</span>
+
+<span class="nv">$transport</span><span class="o">-></span><span class="na">open</span><span class="p">();</span>
<span class="nv">$processor</span><span class="o">-></span><span class="na">process</span><span class="p">(</span><span class="nv">$protocol</span><span class="p">,</span> <span class="nv">$protocol</span><span class="p">);</span>
<span class="nv">$transport</span><span class="o">-></span><span class="na">close</span><span class="p">();</span>
-</pre></div></p>
+</pre></div>
+
<h2 id="additional-information">Additional Information</h2>
</div>
<div class="container">