<html>
<body>
<aside class="not_desired_behavior" data-type="sidebar" epub:type="sidebar">
<p> Hello </p>
<p> this is second! </p>
</aside>
<hr/>
<aside class="not_desired_behavior" data-type="sidebar" epub:type="sidebar">
<div class="sidebar" id="id1591">
<div>
Yo! Lets check this out! Step1
</div>
<h1/>
<pre data-code-language="rust" data-type="programlisting"><code class="sd">/// A structure whose contents are public, so external users can construct</code>
<code class="sd">/// instances of it.</code>
<code class="cp">#[derive(Debug)]</code><code class="w"/>
<code class="k">pub</code><code class="w"> </code><code class="k">struct</code> <code class="nc">ExposedStruct</code><code class="w"> </code><code class="p">{</code><code class="w"/>
<code class="w"> </code><code class="k">pub</code><code class="w"> </code><code class="n">data</code>: <code class="nb">Vec</code><code class="o"><</code><code class="kt">u8</code><code class="o">></code><code class="p">,</code><code class="w"/>
<code class="w"> </code><code class="sd">/// Additional data that is required only when the `schema` feature</code>
<code class="w"> </code><code class="sd">/// is enabled.</code>
<code class="w"> </code><code class="cp">#[cfg(feature = </code><code class="s">"schema"</code><code class="cp">)]</code><code class="w"/>
<code class="w"> </code><code class="k">pub</code><code class="w"> </code><code class="n">schema</code>: <code class="nb">String</code><code class="p">,</code><code class="w"/>
<code class="p">}</code><code class="w"/></pre>
</div>
<div>
Yo! Lets check this out!
</div>
</aside>
<pre data-code-language="rust" data-type="programlisting"><code class="sd">/// A structure whose contents are public, so external users can construct</code>
<code class="sd">/// instances of it.</code>
<code class="cp">#[derive(Debug)]</code><code class="w"/>
<code class="k">pub</code><code class="w"> </code><code class="k">struct</code> <code class="nc">ExposedStruct</code><code class="w"> </code><code class="p">{</code><code class="w"/>
<code class="w"> </code><code class="k">pub</code><code class="w"> </code><code class="n">data</code>: <code class="nb">Vec</code><code class="o"><</code><code class="kt">u8</code><code class="o">></code><code class="p">,</code><code class="w"/>
<code class="w"> </code><code class="sd">/// Additional data that is required only when the `schema` feature</code>
<code class="w"> </code><code class="sd">/// is enabled.</code>
<code class="w"> </code><code class="cp">#[cfg(feature = </code><code class="s">"schema"</code><code class="cp">)]</code><code class="w"/>
<code class="w"> </code><code class="k">pub</code><code class="w"> </code><code class="n">schema</code>: <code class="nb">String</code><code class="p">,</code><code class="w"/>
<code class="p">}</code><code class="w"/></pre>
<pre>firstName lastName<br/>---------- ----------<br/>John Doe<br/>Peter Miller<br/>Nick Anderson<br/>Jane Doe<br/>Peter Doe </pre>
<ul>
<li>
<p class="standard first-item last-item"><span class="italic"><a id="p433"/>Arithmetic operators</span><a class="indexanchor" id="i15_45"/> are used for calculations. The following are available: <samp class="listingcharacter programmingelement">+</samp> (addition<a class="indexanchor" id="i15_46"/>), <samp class="listingcharacter programmingelement">-</samp> (subtraction<a class="indexanchor" id="i15_47"/>), <samp class="listingcharacter programmingelement">*</samp> (multiplication<a class="indexanchor" id="i15_48"/>), <samp class="listingcharacter programmingelement">/</samp> (division<a class="indexanchor" id="i15_49"/>), and <samp class="listingcharacter programmingelement">%</samp> (modulo<a class="indexanchor" id="i15_50"/>). In addition, these operators include the increment<a class="indexanchor" id="i15_51"/> and decrement operators<a class="indexanchor" id="i15_52"/> (<samp class="listingcharacter programmingelement">++</samp> and <samp class="listingcharacter programmingelement">--</samp>), which add or subtract 1 from a number. A power of a number can be calculated by using <samp class="listingcharacter programmingelement">**</samp>.</p>
</li>
<li>
<p class="standard first-item last-item">The <span class="italic">assignment operator</span><a class="indexanchor" id="i15_53"/> is the equal sign (<samp class="listingcharacter programmingelement">=</samp>). You’ve already encountered this operator whenever we’ve set values for variables. In addition, <span class="italic">combined operators</span> allow you to use the value of a variable in an expression and then assign the result of that expression as a new value (shown later in <span class="crossreference "><a href="15_003.html#l15.17">Listing 15.17</a></span>). These operators include <samp class="listingcharacter programmingelement">+=</samp> (for addition), <samp class="listingcharacter programmingelement">-=</samp> (for subtraction, <samp class="listingcharacter programmingelement">*=</samp> (for multiplication), <samp class="listingcharacter programmingelement">/=</samp> (for division), <samp class="listingcharacter programmingelement">%=</samp> (for modulus calculation), <samp class="listingcharacter programmingelement">**=</samp> (for exponentiation), and <samp class="listingcharacter programmingelement">.=</samp> (the string operator for concatenation<a class="indexanchor" id="i15_54"/>).</p>
</li>
<li>
<p class="standard first-item last-item"><span class="italic">Bit operators</span><a class="indexanchor" id="i15_55"/> allow you to check and manipulate specific bits in an integer. The following bit operators are available: <samp class="listingcharacter programmingelement">&</samp> (bitwise AND<a class="indexanchor" id="i15_56"/>), <samp class="listingcharacter programmingelement">|</samp> (bitwise OR<a class="indexanchor" id="i15_57"/>), <samp class="listingcharacter programmingelement">^</samp> (bitwise XOR<a class="indexanchor" id="i15_58"/>), <samp class="listingcharacter programmingelement">~</samp> (bitwise NOT<a class="indexanchor" id="i15_59"/>), <samp class="listingcharacter programmingelement"><<</samp> (bitwise shift<a class="indexanchor" id="i15_60"/> to the left), and <samp class="listingcharacter programmingelement">>></samp> (bitwise shift to the right).</p>
</li>
<li>
<p class="standard first-item"><span class="italic">Comparison operators</span><a class="indexanchor" id="i15_61"/> allow you to compare values directly. The following operators are available: <samp class="listingcharacter programmingelement">==</samp> (equal to<a class="indexanchor" id="i15_62"/>), <samp class="listingcharacter programmingelement">===</samp> (identical to<a class="indexanchor" id="i15_63"/>), <samp class="listingcharacter programmingelement">!=</samp> or <samp class="listingcharacter programmingelement"><></samp> (not equal to<a class="indexanchor" id="i15_64"/>), <samp class="listingcharacter programmingelement">!==</samp> = (not identical to), <samp class="listingcharacter programmingelement"><</samp> (less than), <samp class="listingcharacter programmingelement">></samp> (greater than), <samp class="listingcharacter programmingelement"><=</samp> (less than or equal to), <samp class="listingcharacter programmingelement">>=</samp> (greater than or equal to), and <samp class="listingcharacter programmingelement"><=></samp> (spaceship, see box). “Identical to” in PHP means not only is the value identical but also its type. Refer to <span class="crossreference "><a href="15_003.html#l15.12">Listing 15.12</a></span> for more information on this topic.</p>
<div class="listing " id="l15.12"><pre><span class="gruen"><?php</span><span class="schwarz"><br/></span><span class="hellblau">$a</span><span class="schwarz"> = </span><span class="braun">'1'</span><span class="schwarz">;</span><br/><span class="hellblau">$b</span><span class="schwarz"> = </span><span class="violett">1</span><span class="schwarz">;</span><br/><br/><span class="hellblau">$c</span><span class="schwarz"> = </span><span class="hellblau">$a</span><span class="schwarz"> == </span><span class="hellblau">$b</span><span class="schwarz">; </span><span class="gelbgruen"> // Returns true.</span><span class="schwarz"><br/></span><span class="hellblau">$d</span><span class="schwarz"> = </span><span class="hellblau">$a</span><span class="schwarz"> === </span><span class="hellblau">$b</span><span class="schwarz">;</span><span class="gelbgruen"> // Returns false because the type comparison fails.</span><span class="schwarz"> </span><span class="schwarz"/></pre></div>
<p class="caption "><b>Listing 15.12</b>
Comparisons of Equality and Identity</p>
</li>
<li>
<p class="standard first-item last-item"><a class="indexanchor" id="i15_65"/><span class="italic">Operator for program execution: Backticks</span> (<samp class="listingcharacter programmingelement">``</samp>) can be used to execute external programs. Note that backticks are not simple execution characters and that execution will fail if the <samp class="listingcharacter programmingelement">shell_exec()</samp> function has been disabled. The line <samp class="listingcharacter programmingelement">$file_list = `ls -al`;</samp> tries to execute the <samp class="listingcharacter programmingelement">ls</samp> command line tool, which lists all files and directories of the current folder.</p>
</li>
<li>
<p class="standard first-item last-item"><span class="italic">Logical operators</span><a class="indexanchor" id="i15_66"/> are for using Boolean values. The following operators can be used: <samp class="listingcharacter programmingelement">and</samp> or <samp class="listingcharacter programmingelement">&&</samp> (logical AND<a class="indexanchor" id="i15_67"/>), <samp class="listingcharacter programmingelement">or</samp> or <samp class="listingcharacter programmingelement">||</samp> (logical OR<a class="indexanchor" id="i15_68"/>), <samp class="listingcharacter programmingelement">xor</samp> (exclusive OR<a class="indexanchor" id="i15_69"/>), and <samp class="listingcharacter programmingelement">!</samp> (negation).</p>
</li>
<li>
<p class="standard first-item last-item"><span class="italic">Array operators</span><a class="indexanchor" id="i15_70"/> are used to compare or manipulate arrays. <samp class="listingcharacter programmingelement">$a + $b</samp> unites two arrays. <samp class="listingcharacter programmingelement">==</samp> returns <samp class="listingcharacter programmingelement">true</samp> if both arrays contain the same key-value pairs. <samp class="listingcharacter programmingelement">===</samp> returns <samp class="listingcharacter programmingelement">true</samp> if both arrays contain the same key-value pairs in the same order and they are of the same type. Accordingly, <samp class="listingcharacter programmingelement">!=</samp> or <samp class="listingcharacter programmingelement"><></samp> mean that two arrays are not equal. <samp class="listingcharacter programmingelement">!==</samp> in turn means “not identical,” where a type comparison is also performed.</p>
</li>
<li>
<p class="standard first-item last-item"><a class="indexanchor" id="i15_71"/><span class="italic">Type operator:</span> The <samp class="listingcharacter programmingelement">instanceof</samp> keyword checks if an object belongs to a certain class.</p>
</li>
<li>
<p class="standard first-item"><a id="p434"/>The <span class="italic">ternary operator</span><a class="indexanchor" id="i15_72"/> (shown in <span class="crossreference "><a href="15_003.html#l15.13">Listing 15.13</a></span>) is another comparison operator that returns an expression and replaces a longer <samp class="listingcharacter programmingelement">if</samp> statement. This operator also available in the short version, where the middle part can be omitted, as shown in <span class="crossreference "><a href="15_003.html#l15.14">Listing 15.14</a></span>.</p>
<div class="listing " id="l15.13"><pre><span class="gruen"><?php</span><span class="schwarz"><br/></span><span class="hellblau">$action</span><span class="schwarz"> = ( </span><span class="rot">empty</span><span class="schwarz">( </span><span class="hellblau">$_POST</span><span class="schwarz">[</span><span class="braun">'action'</span><span class="schwarz">] ) ) ? </span><span class="braun">'standard'</span><span class="schwarz"> : </span><span class="hellblau">$_POST</span><span class="schwarz">[</span><span class="braun">'action'</span><span class="schwarz">];</span><br/><span class="gelbgruen"><br/></span>// The above is identical to the IF statement below.<span class="schwarz"><br/></span><span class="rot">if</span><span class="violett"> </span><span class="schwarz">(</span><span class="rot">empty</span><span class="schwarz">(</span><span class="hellblau">$_POST</span><span class="schwarz">[</span><span class="braun">'action'</span><span class="schwarz">])) {</span><br/> <span class="hellblau">$action</span><span class="schwarz"> = </span><span class="braun">'standard'</span><span class="schwarz">;</span><br/>} <span class="rot">else</span><span class="schwarz"> {</span><br/> <span class="hellblau">$action</span><span class="schwarz"> = </span><span class="hellblau">$_POST</span><span class="schwarz">[</span><span class="braun">'action'</span><span class="schwarz">];</span><br/>} <span class="schwarz"/></pre></div>
<p class="caption "><b>Listing 15.13</b>
Ternary Operator</p>
<div class="listing " id="l15.14"><pre><span class="gruen"><?php</span><span class="schwarz"><br/></span><span class="hellblau">$firstName</span><span class="schwarz"> = </span><span class="braun">''</span><span class="schwarz">;</span><br/><span class="hellblau">$firstName</span><span class="schwarz"> = </span><span class="hellblau">$firstName</span><span class="schwarz"> ?: </span><span class="braun">'John'</span><span class="schwarz">;</span><span class="gelbgruen"> // Contains 'John'.</span><span class="schwarz"><br/></span><br/><span class="hellblau">$firstName</span><span class="schwarz"> = </span><span class="braun">'Anne'</span><span class="schwarz">;</span><br/><span class="hellblau">$firstName</span><span class="schwarz"> = </span><span class="hellblau">$firstName</span><span class="schwarz"> ?: </span><span class="braun">'John'</span><span class="schwarz">;</span><span class="gelbgruen"> // Contains 'Anne'.</span><span class="schwarz"> </span><span class="schwarz"/></pre></div>
<p class="caption "><b>Listing 15.14</b>
Short Ternary Operator</p>
</li>
<li>
<p class="standard first-item">Quite similar to the ternary operator is the <span class="italic">null coalescing operator</span><a class="indexanchor" id="i15_73"/>. This operator is also an assignment operator in combination with <samp class="listingcharacter programmingelement">NULL</samp>, as shown in <span class="crossreference "><a href="15_003.html#l15.15">Listing 15.15</a></span>. In particular, the result of the left side does not give any hint or warning if the value does not exist.</p>
<div class="listing " id="l15.15"><pre><span class="gruen"><?php</span><span class="schwarz"><br/></span><span class="hellblau">$firstName</span><span class="schwarz"> = </span><span class="hellblau">$firstName</span><span class="schwarz"> ?? </span><span class="braun">'John'</span><span class="schwarz">;</span><span class="gelbgruen"> // Returns 'John'</span><span class="schwarz"><br/></span><br/><span class="hellblau">$firstName</span><span class="schwarz"> = </span><span class="braun">'Anne'</span><span class="schwarz">;</span><br/><span class="hellblau">$firstName</span><span class="schwarz"> = </span><span class="hellblau">$firstName</span><span class="schwarz"> ?? </span><span class="braun">'John'</span><span class="schwarz">;</span><span class="gelbgruen"> // Returns 'Anne'</span><span class="schwarz"> </span><span class="schwarz"/></pre></div>
<p class="caption "><b>Listing 15.15</b>
Null Coalescing Operator</p>
</li>
</ul>
<div class="listing " id="l15.13"><pre><span class="gruen"><?php</span><span class="schwarz"><br/></span><span class="hellblau">$action</span><span class="schwarz"> = ( </span><span class="rot">empty</span><span class="schwarz">( </span><span class="hellblau">$_POST</span><span class="schwarz">[</span><span class="braun">'action'</span><span class="schwarz">] ) ) ? </span><span class="braun">'standard'</span><span class="schwarz"> : </span><span class="hellblau">$_POST</span><span class="schwarz">[</span><span class="braun">'action'</span><span class="schwarz">];</span><br/><span class="gelbgruen"><br/></span>// The above is identical to the IF statement below.<span class="schwarz"><br/></span><span class="rot">if</span><span class="violett"> </span><span class="schwarz">(</span><span class="rot">empty</span><span class="schwarz">(</span><span class="hellblau">$_POST</span><span class="schwarz">[</span><span class="braun">'action'</span><span class="schwarz">])) {</span><br/> <span class="hellblau">$action</span><span class="schwarz"> = </span><span class="braun">'standard'</span><span class="schwarz">;</span><br/>} <span class="rot">else</span><span class="schwarz"> {</span><br/> <span class="hellblau">$action</span><span class="schwarz"> = </span><span class="hellblau">$_POST</span><span class="schwarz">[</span><span class="braun">'action'</span><span class="schwarz">];</span><br/>} <span class="schwarz"/></pre></div>
</body>
</html>