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/20 15:51:20 UTC

svn commit: r902536 [8/9] - in /websites/staging/thrift/trunk/content: ./ tutorial/

Modified: websites/staging/thrift/trunk/content/tutorial/perl.html
==============================================================================
--- websites/staging/thrift/trunk/content/tutorial/perl.html (original)
+++ websites/staging/thrift/trunk/content/tutorial/perl.html Thu Mar 20 14:51:19 2014
@@ -72,9 +72,108 @@
 
 <h3 id="prerequisites">Prerequisites</h3>
 <h3 id="client">Client</h3>
-<p>[snippet:path=tutorial/perl/PerlClient.pl:lang=ruby:lines=20,79]</p>
+<p><div class="codehilite"><pre><span class="c1">#</span></p>
+<p><span class="n">use</span> <span class="n">strict</span><span class="p">;</span>
+<span class="n">use</span> <span class="n">warnings</span><span class="p">;</span></p>
+<p><span class="n">use</span> <span class="n">lib</span> <span class="s1">&#39;../../lib/perl/lib&#39;</span><span class="p">;</span>
+<span class="n">use</span> <span class="n">lib</span> <span class="s1">&#39;../gen-perl&#39;</span><span class="p">;</span></p>
+<p><span class="n">use</span> <span class="no">Thrift</span><span class="p">;</span>
+<span class="n">use</span> <span class="no">Thrift</span><span class="o">::</span><span class="no">BinaryProtocol</span><span class="p">;</span>
+<span class="n">use</span> <span class="no">Thrift</span><span class="o">::</span><span class="no">Socket</span><span class="p">;</span>
+<span class="n">use</span> <span class="no">Thrift</span><span class="o">::</span><span class="no">BufferedTransport</span><span class="p">;</span></p>
+<p><span class="n">use</span> <span class="n">shared</span><span class="o">::</span><span class="no">SharedService</span><span class="p">;</span>
+<span class="n">use</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">Calculator</span><span class="p">;</span>
+<span class="n">use</span> <span class="n">shared</span><span class="o">::</span><span class="no">Types</span><span class="p">;</span>
+<span class="n">use</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">Types</span><span class="p">;</span></p>
+<p><span class="n">use</span> <span class="no">Data</span><span class="o">::</span><span class="no">Dumper</span><span class="p">;</span></p>
+<p><span class="n">my</span> <span class="vg">$socket</span>    <span class="o">=</span> <span class="kp">new</span> <span class="no">Thrift</span><span class="o">::</span><span class="no">Socket</span><span class="p">(</span><span class="s1">&#39;localhost&#39;</span><span class="p">,</span><span class="mi">9090</span><span class="p">);</span>
+<span class="n">my</span> <span class="vg">$transport</span> <span class="o">=</span> <span class="kp">new</span> <span class="no">Thrift</span><span class="o">::</span><span class="no">BufferedTransport</span><span class="p">(</span><span class="vg">$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="n">my</span> <span class="vg">$protocol</span>  <span class="o">=</span> <span class="kp">new</span> <span class="no">Thrift</span><span class="o">::</span><span class="no">BinaryProtocol</span><span class="p">(</span><span class="vg">$transport</span><span class="p">);</span>
+<span class="n">my</span> <span class="vg">$client</span>    <span class="o">=</span> <span class="kp">new</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">CalculatorClient</span><span class="p">(</span><span class="vg">$protocol</span><span class="p">);</span></p>
+<p><span class="nb">eval</span><span class="p">{</span>
+    <span class="vg">$transport</span><span class="o">-&gt;</span><span class="nb">open</span><span class="p">();</span></p>
+<div class="codehilite"><pre><span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">client</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>ping<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>();<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nb&quot;</span><span class="nt">&gt;</span>print<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;s2&quot;</span><span class="nt">&gt;</span><span class="ni">&amp;quot;</span>ping()<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;se&quot;</span><span class="nt">&gt;</span>\n<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;s2&quot;</span><span class="nt">&gt;</span><span class="ni">&amp;quot;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>;<span class="nt">&lt;/span&gt;</span>
+
+
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>my<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">sum</span><span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>=<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">client</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">
 &quot;n&quot;</span><span class="nt">&gt;</span>add<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>(<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;mi&quot;</span><span class="nt">&gt;</span>1<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>,<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;mi&quot;</span><span class="nt">&gt;</span>1<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>);<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nb&quot;</span><span class="nt">&gt;</span>print<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;s2&quot;</span><span class="nt">&gt;</span><span class="ni">&amp;quot;</span>1+1=<span class="p">$</span><span class="nv">sum</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;se&quot;</span><span class="nt">&gt;</span>\n<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;s2&quot;</span><span class="nt">&gt;</span><span class="ni">&amp;quot;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>;<span class="nt">&lt;/span&gt;</span>
+
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>my<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">work</span><span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>=<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;kp&quot;</span><span class="nt">&gt;</span>new<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>tutorial<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>::
 <span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;no&quot;</span><span class="nt">&gt;</span>Work<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>();<span class="nt">&lt;/span&gt;</span>
+
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">work</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>op<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>(<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>tutorial<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>::<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</
 span><span class="s">&quot;no&quot;</span><span class="nt">&gt;</span>Operation<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>::<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;no&quot;</span><span class="nt">&gt;</span>DIVIDE<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>);<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">work</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>num1<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>(<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;mi&quot;</span><span class="nt">&gt;</span>1<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>);<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">work</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>num2<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>(<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;mi&quot;</span><span class="nt">&gt;</span>0<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>);<span class="nt">&lt;/span&gt;</span>
+
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nb&quot;</span><span class="nt">&gt;</span>eval<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span><span class="err">{</span><span class="nt">&lt;/span&gt;</span>
+    <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">client</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>calculate<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>(<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;mi&quot;</span><span class="nt">&gt;</span>1<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>,<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</
 span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">work</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>);<span class="nt">&lt;/span&gt;</span>
+    <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nb&quot;</span><span class="nt">&gt;</span>print<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;s2&quot;</span><span class="nt">&gt;</span><span class="ni">&amp;quot;</span>Whoa! We can divide by zero?<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;se&quot;</span><span class="nt">&gt;</span>\n<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;s2&quot;</span><span class="nt">&gt;</span><span class="ni">&amp;quot;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>;<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>};<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;k&quot;</span><span class="nt">&gt;</span>if<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>(<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span>@<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>)<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span><span class="err">{</span><span class="nt">&lt;/span&gt;</span>
+    <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nb&quot;</span><span class="nt">&gt;</span>warn<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;s2&quot;</span><span class="nt">&gt;</span><span class="ni">&amp;quot;</span>InvalidOperation: <span class="ni">&amp;quot;</span><span class="nt">&lt;/span&gt;</span>
+</pre></div>
+
+
+<p></pre></div></p>
 <h3 id="server">Server</h3>
-<p>[snippet:path=tutorial/perl/PerlServer.pl:lang=ruby:lines=20,85]</p>
+<p><div class="codehilite"><pre><span class="c1">#</span></p>
+<p><span class="n">use</span> <span class="n">strict</span><span class="p">;</span>
+<span class="n">use</span> <span class="n">lib</span> <span class="s1">&#39;../gen-perl&#39;</span><span class="p">;</span>
+<span class="n">use</span> <span class="no">Thrift</span><span class="o">::</span><span class="no">Socket</span><span class="p">;</span>
+<span class="n">use</span> <span class="no">Thrift</span><span class="o">::</span><span class="no">Server</span><span class="p">;</span>
+<span class="n">use</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">Calculator</span><span class="p">;</span></p>
+<p><span class="n">package</span> <span class="no">CalculatorHandler</span><span class="p">;</span>
+<span class="n">use</span> <span class="n">base</span> <span class="n">qw</span><span class="p">(</span><span class="n">tutorial</span><span class="o">::</span><span class="no">CalculatorIf</span><span class="p">);</span></p>
+<p><span class="nb">sub</span> <span class="kp">new</span> <span class="p">{</span>
+    <span class="n">my</span> <span class="vg">$classname</span> <span class="o">=</span> <span class="n">shift</span><span class="p">;</span>
+    <span class="n">my</span> <span class="vg">$self</span>      <span class="o">=</span> <span class="p">{};</span></p>
+<div class="codehilite"><pre><span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;k&quot;</span><span class="nt">&gt;</span>return<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;n&quot;</span><span class="nt">&gt;</span>bless<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>(<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">self</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>,<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;vg&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">classnam
 e</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>);<span class="nt">&lt;/span&gt;</span>
+</pre></div>
+
+
+<p><span class="p">}</span></p>
+<p><span class="nb">sub</span> <span class="n">ping</span>
+<span class="p">{</span>
+  <span class="nb">print</span> <span class="s2">&quot;ping()</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
+<span class="p">}</span></p>
+<p><span class="nb">sub</span> <span class="n">add</span>
+<span class="p">{</span>
+  <span class="n">my</span><span class="p">(</span><span class="vg">$self</span><span class="p">,</span> <span class="vg">$n1</span><span class="p">,</span> <span class="vg">$n2</span><span class="p">)</span> <span class="o">=</span> <span class="vi">@_</span><span class="p">;</span>
+  <span class="nb">printf</span><span class="p">(</span><span class="s2">&quot;add(%d,%d)</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="vg">$n1</span><span class="p">,</span> <span class="vg">$n2</span><span class="p">);</span>
+  <span class="k">return</span> <span class="vg">$n1</span> <span class="o">+</span> <span class="vg">$n2</span><span class="p">;</span>
+<span class="p">}</span></p>
+<p><span class="nb">sub</span> <span class="n">calculate</span>
+<span class="p">{</span>
+  <span class="n">my</span><span class="p">(</span><span class="vg">$self</span><span class="p">,</span> <span class="vg">$logid</span><span class="p">,</span> <span class="vg">$work</span><span class="p">)</span> <span class="o">=</span> <span class="vi">@_</span><span class="p">;</span>
+  <span class="n">my</span> <span class="vg">$op</span>   <span class="o">=</span> <span class="vg">$work</span><span class="o">-&gt;</span><span class="p">{</span><span class="n">op</span><span class="p">};</span>
+  <span class="n">my</span> <span class="vg">$num1</span> <span class="o">=</span> <span class="vg">$work</span><span class="o">-&gt;</span><span class="p">{</span><span class="n">num1</span><span class="p">};</span>
+  <span class="n">my</span> <span class="vg">$num2</span> <span class="o">=</span> <span class="vg">$work</span><span class="o">-&gt;</span><span class="p">{</span><span class="n">num2</span><span class="p">};</span>
+  <span class="nb">printf</span><span class="p">(</span><span class="s2">&quot;calculate(%d, %d %d %d)</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="vg">$logid</span><span class="p">,</span> <span class="vg">$num1</span><span class="p">,</span> <span class="vg">$num2</span><span class="p">,</span> <span class="vg">$op</span><span class="p">);</span></p>
+<p><span class="n">my</span> <span class="vg">$val</span><span class="p">;</span></p>
+<p><span class="k">if</span> <span class="p">(</span><span class="vg">$op</span> <span class="o">==</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">Operation</span><span class="o">::</span><span class="no">ADD</span><span class="p">)</span> <span class="p">{</span>
+    <span class="vg">$val</span> <span class="o">=</span> <span class="vg">$num1</span> <span class="o">+</span> <span class="vg">$num2</span><span class="p">;</span>
+  <span class="p">}</span> <span class="k">elsif</span> <span class="p">(</span><span class="vg">$op</span> <span class="o">==</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">Operation</span><span class="o">::</span><span class="no">SUBTRACT</span><span class="p">)</span> <span class="p">{</span>
+    <span class="vg">$val</span> <span class="o">=</span> <span class="vg">$num1</span> <span class="o">-</span> <span class="vg">$num2</span><span class="p">;</span>
+  <span class="p">}</span> <span class="k">elsif</span> <span class="p">(</span><span class="vg">$op</span> <span class="o">==</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">Operation</span><span class="o">::</span><span class="no">MULTIPLY</span><span class="p">)</span> <span class="p">{</span>
+    <span class="vg">$val</span> <span class="o">=</span> <span class="vg">$num1</span> <span class="o">*</span> <span class="vg">$num2</span><span class="p">;</span>
+  <span class="p">}</span> <span class="k">elsif</span> <span class="p">(</span><span class="vg">$op</span> <span class="o">==</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">Operation</span><span class="o">::</span><span class="no">DIVIDE</span><span class="p">)</span> <span class="p">{</span>
+    <span class="k">if</span> <span class="p">(</span><span class="vg">$num2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
+    <span class="p">{</span>
+      <span class="n">my</span> <span class="vg">$x</span> <span class="o">=</span> <span class="kp">new</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">InvalidOperation</span><span class="p">;</span>
+      <span class="vg">$x</span><span class="o">-&gt;</span><span class="n">what</span><span class="p">(</span><span class="vg">$op</span><span class="p">);</span>
+      <span class="vg">$x</span><span class="o">-&gt;</span><span class="n">why</span><span class="p">(</span><span class="s1">&#39;Cannot divide by 0&#39;</span><span class="p">);</span>
+      <span class="n">die</span> <span class="vg">$x</span><span class="p">;</span>
+    <span class="p">}</span>
+    <span class="vg">$val</span> <span class="o">=</span> <span class="vg">$num1</span> <span class="o">/</span> <span class="vg">$num2</span><span class="p">;</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="n">my</span> <span class="vg">$x</span> <span class="o">=</span> <span class="kp">new</span> <span class="n">tutorial</span><span class="o">::</span><span class="no">InvalidOperation</span><span class="p">;</span>
+    <span class="vg">$x</span><span class="o">-&gt;</span><span class="n">what</span><span class="p">(</span><span class="vg">$op</span><span class="p">);</span>
+    <span class="vg">$x</span><span class="o">-&gt;</span><span class="n">why</span><span class="p">(</span><span class="s1">&#39;Invalid operation&#39;</span><span class="p">);</span>
+    <span class="n">die</span> <span class="vg">$x</span><span class="p">;</span>
+  <span class="p">}</span></p>
+<p><span class="n">my</span> <span class="vg">$log</span> <span class="o">=</span> <span class="kp">new</span> <span class="n">shared</span><span class="o">::</span><span class="no">SharedStruct</span><span class="p">;</span>
+  <span class="vg">$log</span><span class="o">-&gt;</span><span class="n">key</span><span class="p">(</span><span class="vg">$logid</span><span class="p">);</span>
+  <span class="vg">$log</span><span class="o">-&gt;</span><span class="n">value</span><span class="p">(</span><span class="n">int</span><span class="p">(</span><span class="vg">$val</span><span class="p">));</span>
+</pre></div></p>
 <h2 id="additional-information">Additional Information</h2>
           
 	</div>

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 Thu Mar 20 14:51:19 2014
@@ -72,9 +72,187 @@
 
 <h3 id="prerequisites">Prerequisites</h3>
 <h3 id="client">Client</h3>
-<p>[snippet:path=tutorial/php/PhpClient.php:lang=php:lines=2,91]</p>
+<p><div class="codehilite"><pre><span class="cp">&lt;?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">&#39;/../../lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php&#39;</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">&#39;/..&#39;</span><span class="p">)</span><span class="o">.</span><span class="s1">&#39;/gen-php&#39;</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">-&gt;</span><span class="na">registerNamespace</span><span class="p">(</span><span class="s1">&#39;Thrift&#39;</span><span class="p">,</span> <span class="nx"><strong>DIR</strong></span> <span class="o">.</span> <span class="s1">&#39;/../../lib/php/lib&#39;</span><span class="p">);</span>
+<span class="nv">$loader</span><span class="o">-&gt;</span><span class="na">registerDefinition</span><span class="p">(</span><span class="s1">&#39;shared&#39;</span><span class="p">,</span> <span class="nv">$GEN_DIR</span><span class="p">);</span>
+<span class="nv">$loader</span><span class="o">-&gt;</span><span class="na">registerDefinition</span><span class="p">(</span><span class="s1">&#39;tutorial&#39;</span><span class="p">,</span> <span class="nv">$GEN_DIR</span><span class="p">);</span>
+<span class="nv">$loader</span><span class="o">-&gt;</span><span class="na">register</span><span class="p">();</span></p>
+<p><span class="cm">/<em></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>
+<span class="cm"> * regarding copyright ownership. The ASF licenses this file</span>
+<span class="cm"> * to you under the Apache License, Version 2.0 (the</span>
+<span class="cm"> * &quot;License&quot;); 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"> *   http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="cm"> <em></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"> * &quot;AS IS&quot; 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="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">if</span> <span class="p">(</span><span class="nb">array_search</span><span class="p">(</span><span class="s1">&#39;--http&#39;</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">&#39;localhost&#39;</span><span class="p">,</span> <span class="mi">8080</span><span class="p">,</span> <span class="s1">&#39;/php/PhpServer.php&#39;</span><span class="p">);</span>
+  <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
+    <span class="nv">$socket</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">TSocket</span><span class="p">(</span><span class="s1">&#39;localhost&#39;</span><span class="p">,</span> <span class="mi">9090</span><span class="p">);</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="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">-&gt;</span><span class="na">open</span><span class="p">();</span></p>
+<p><span class="nv">$client</span><span class="o">-&gt;</span><span class="na">ping</span><span class="p">();</span>
+  <span class="k">print</span> <span class="s2">&quot;ping()</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span></p>
+<p><span class="nv">$sum</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-&gt;</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">&quot;1+1=</span><span class="si">$sum</span><span class="se">\n</span><span class="s2">&quot;</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">-&gt;</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">-&gt;</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">-&gt;</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">$client</span><span class="o">-&gt;</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">&quot;Whoa! We can divide by zero?</span><span class="se">\n</span><span class="s2">&quot;</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">&quot;InvalidOperation: </span><span class="si">$io-&gt;why</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span>
+  <span class="p">}</span></p>
+<p><span class="nv">$work</span><span class="o">-&gt;</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">-&gt;</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">-&gt;</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">-&gt;</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">&quot;15-10=</span><span class="si">$diff</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span></p>
+<p><span class="nv">$log</span> <span class="o">=</span> <span class="nv">$client</span><span class="o">-&gt;</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">&quot;Log: </span><span class="si">$log-&gt;value</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">;</span></p>
+<p><span class="nv">$transport</span><span class="o">-&gt;</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="s1">&#39;TException: &#39;</span><span class="o">.</span><span class="nv">$tx</span><span class="o">-&gt;</span><span class="na">getMessage</span><span class="p">()</span>
+</pre></div></p>
 <h3 id="server">Server</h3>
-<p>[snippet:path=tutorial/php/PhpServer.php:lang=php:lines=2,130]</p>
+<p><div class="codehilite"><pre><span class="cp">&lt;?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">&#39;/../../lib/php/lib/Thrift/ClassLoader/ThriftClassLoader.php&#39;</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">&#39;/..&#39;</span><span class="p">)</span><span class="o">.</span><span class="s1">&#39;/gen-php&#39;</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">-&gt;</span><span class="na">registerNamespace</span><span class="p">(</span><span class="s1">&#39;Thrift&#39;</span><span class="p">,</span> <span class="nx"><strong>DIR</strong></span> <span class="o">.</span> <span class="s1">&#39;/../../lib/php/lib&#39;</span><span class="p">);</span>
+<span class="nv">$loader</span><span class="o">-&gt;</span><span class="na">registerDefinition</span><span class="p">(</span><span class="s1">&#39;shared&#39;</span><span class="p">,</span> <span class="nv">$GEN_DIR</span><span class="p">);</span>
+<span class="nv">$loader</span><span class="o">-&gt;</span><span class="na">registerDefinition</span><span class="p">(</span><span class="s1">&#39;tutorial&#39;</span><span class="p">,</span> <span class="nv">$GEN_DIR</span><span class="p">);</span>
+<span class="nv">$loader</span><span class="o">-&gt;</span><span class="na">register</span><span class="p">();</span></p>
+<p><span class="cm">/<em></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>
+<span class="cm"> * regarding copyright ownership. The ASF licenses this file</span>
+<span class="cm"> * to you under the Apache License, Version 2.0 (the</span>
+<span class="cm"> * &quot;License&quot;); 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"> *   http://www.apache.org/licenses/LICENSE-2.0</span>
+<span class="cm"> <em></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"> * &quot;AS IS&quot; 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"> * This is not a stand-alone server.  It should be run as a normal</span>
+<span class="cm"> * php web script (like through Apache&#39;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 &quot;--http&quot;.</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">&#39;cli&#39;</span><span class="p">)</span> <span class="p">{</span>
+  <span class="nb">ini_set</span><span class="p">(</span><span class="s2">&quot;display_errors&quot;</span><span class="p">,</span> <span class="s2">&quot;stderr&quot;</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="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="nb">error_log</span><span class="p">(</span><span class="s2">&quot;ping()&quot;</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="nb">error_log</span><span class="p">(</span><span class="s2">&quot;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">)&quot;</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="nb">error_log</span><span class="p">(</span><span class="s2">&quot;calculate(</span><span class="si">{</span><span class="nv">$logid</span><span class="si">}</span><span class="s2">, {{$w-&gt;op}, </span><span class="si">{</span><span class="nv">$w</span><span class="o">-&gt;</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">-&gt;</span><span class="na">num2</span><span class="si">}</span><span class="s2">})&quot;</span><span class="p">);</span>
+    <span class="k">switch</span> <span class="p">(</span><span class="nv">$w</span><span class="o">-&gt;</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>
+        <span class="nv">$val</span> <span class="o">=</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num1</span> <span class="o">+</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num2</span><span class="p">;</span>
+        <span class="k">break</span><span class="p">;</span>
+      <span class="k">case</span> <span class="nx">\tutorial\Operation</span><span class="o">::</span><span class="na">SUBTRACT</span><span class="o">:</span>
+        <span class="nv">$val</span> <span class="o">=</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num1</span> <span class="o">-</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num2</span><span class="p">;</span>
+        <span class="k">break</span><span class="p">;</span>
+      <span class="k">case</span> <span class="nx">\tutorial\Operation</span><span class="o">::</span><span class="na">MULTIPLY</span><span class="o">:</span>
+        <span class="nv">$val</span> <span class="o">=</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num1</span> <span class="o">*</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num2</span><span class="p">;</span>
+        <span class="k">break</span><span class="p">;</span>
+      <span class="k">case</span> <span class="nx">\tutorial\Operation</span><span class="o">::</span><span class="na">DIVIDE</span><span class="o">:</span>
+        <span class="k">if</span> <span class="p">(</span><span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num2</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span> <span class="p">{</span>
+          <span class="nv">$io</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\tutorial\InvalidOperation</span><span class="p">();</span>
+          <span class="nv">$io</span><span class="o">-&gt;</span><span class="na">what</span> <span class="o">=</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">op</span><span class="p">;</span>
+          <span class="nv">$io</span><span class="o">-&gt;</span><span class="na">why</span> <span class="o">=</span> <span class="s2">&quot;Cannot divide by 0&quot;</span><span class="p">;</span>
+          <span class="k">throw</span> <span class="nv">$io</span><span class="p">;</span>
+        <span class="p">}</span>
+        <span class="nv">$val</span> <span class="o">=</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num1</span> <span class="o">/</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">num2</span><span class="p">;</span>
+        <span class="k">break</span><span class="p">;</span>
+      <span class="k">default</span><span class="o">:</span>
+        <span class="nv">$io</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">\tutorial\InvalidOperation</span><span class="p">();</span>
+        <span class="nv">$io</span><span class="o">-&gt;</span><span class="na">what</span> <span class="o">=</span> <span class="nv">$w</span><span class="o">-&gt;</span><span class="na">op</span><span class="p">;</span>
+        <span class="nv">$io</span><span class="o">-&gt;</span><span class="na">why</span> <span class="o">=</span> <span class="s2">&quot;Invalid Operation&quot;</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">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">log</span><span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>=<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;k&quot;</span><span class="nt">&gt;</span>new<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nx&quot;</span><span class="nt">&gt;</span>\shared\SharedStruct<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>();<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">log</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;na&quot;</span><span class="nt">&gt;</span>key<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>=<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">logid</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><spa
 n class="nt">&gt;</span>;<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">log</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;na&quot;</span><span class="nt">&gt;</span>value<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>=<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>(<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;nx&quot;</span><span class="nt">&gt;</span>string<span class="nt">&lt
 ;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>)<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">val</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>;<span class="nt">&lt;/span&gt;</span>
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">this</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>-<span class="ni">&amp;gt;</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;na&quot;</span><span class="nt">&gt;</span>log<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>[<span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">logid</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>]<span class="nt">&lt;/sp
 an&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;o&quot;</span><span class="nt">&gt;</span>=<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">log</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>;<span class="nt">&lt;/span&gt;</span>
+
+<span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;k&quot;</span><span class="nt">&gt;</span>return<span class="nt">&lt;/span&gt;</span> <span class="nt">&lt;span</span> <span class="na">class=</span><span class="s">&quot;nv&quot;</span><span class="nt">&gt;</span><span class="p">$</span><span class="nv">val</span><span class="nt">&lt;/span&gt;&lt;span</span> <span class="na">class=</span><span class="s">&quot;p&quot;</span><span class="nt">&gt;</span>;<span class="nt">&lt;/span&gt;</span>
+</pre></div>
+
+
+<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="nb">error_log</span><span class="p">(</span><span class="s2">&quot;getStruct(</span><span class="si">{</span><span class="nv">$key</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">);</span>
+    <span class="c1">// This actually doesn&#39;t work because the PHP interpreter is</span>
+    <span class="c1">// restarted for every request.</span>
+    <span class="c1">//return $this-&gt;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">&quot;key&quot;</span> <span class="o">=&gt;</span> <span class="nv">$key</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span> <span class="o">=&gt;</span> <span class="s2">&quot;PHP is stateless!&quot;</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="nb">error_log</span><span class="p">(</span><span class="s2">&quot;zip()&quot;</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">&#39;Content-Type&#39;</span><span class="p">,</span> <span class="s1">&#39;application/x-thrift&#39;</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">&#39;cli&#39;</span><span class="p">)</span> <span class="p">{</span>
+  <span class="k">echo</span> <span class="s2">&quot;</span><span class="se">\r\n</span><span class="s2">&quot;</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">-&gt;</span><span class="na">open</span><span class="p">();</span>
+<span class="nv">$processor</span><span class="o">-&gt;</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">-&gt;</span><span class="na">close</span><span class="p">();</span>
+</pre></div></p>
 <h2 id="additional-information">Additional Information</h2>
           
 	</div>