<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>php | Hugo Ferreira</title>
    <link>https://hugo.ferreira.cc/tags/php/</link>
    <description>Recent content in Php by Hugo Ferreira</description>
    
    <image>
      
      <title>php | Hugo Ferreira</title>
      <url>https://hugo.ferreira.cc/hf-bw.jpg</url>
      <link>https://hugo.ferreira.cc/tags/php/</link>
      
    </image>
    <generator>Hugo</generator>
    <language>en-GB</language>
    
    <copyright>2000–2024 by Hugo Ferreira · CC BY 4.0</copyright>
    
    <lastBuildDate>Mon, 15 Apr 2019 00:46:48 +0000</lastBuildDate>
    <atom:link href="https://hugo.ferreira.cc/tags/php/index.xml" rel="self" type="application/rss+xml" />
    <item>
      
      <title>💭 PHP shenanigans</title>
      <link>https://hugo.ferreira.cc/php-shenanigans/</link>
      
      <pubDate>Mon, 15 Apr 2019 00:46:48 +0000</pubDate>
      <guid>https://hugo.ferreira.cc/php-shenanigans/</guid>
      <description>&lt;p&gt;Pop quiz about &lt;a href=&#34;https://www.php.net/&#34;&gt;PHP&lt;/a&gt; and something we’ve stumbled upon last week, while working on a client’s codebase.&lt;/p&gt;</description>

      
      
      <content:encoded><![CDATA[<p>Pop quiz about <a href="https://www.php.net/">PHP</a> and something we’ve stumbled upon last week, while working on a client’s codebase.</p>
<p>Given the following code:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">Foo</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">public</span> <span class="nv">$bar</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">public</span> <span class="k">function</span> <span class="fm">__construct</span><span class="p">(</span><span class="nv">$value</span><span class="p">)</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">bar</span> <span class="o">=</span> <span class="nv">$value</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$a</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Foo</span><span class="p">(</span><span class="s1">&#39;a&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nv">$b</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Foo</span><span class="p">(</span><span class="s1">&#39;b&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nv">$c</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Foo</span><span class="p">(</span><span class="s1">&#39;c&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nv">$result</span> <span class="o">=</span> <span class="nx">array_diff</span><span class="p">(</span> <span class="p">[</span><span class="nv">$a</span><span class="p">,</span> <span class="nv">$b</span><span class="p">,</span> <span class="nv">$c</span><span class="p">],</span> <span class="p">[</span><span class="nv">$a</span><span class="p">,</span> <span class="nv">$b</span><span class="p">]</span> <span class="p">);</span>
</span></span></code></pre></div><p>What would you <em>expect</em> the result to be?</p>
<p>1️⃣ <code>Array( )</code><br>
2️⃣ <code>Array( [0] =&gt; Foo( [bar] =&gt; c ) )</code><br>
3️⃣ <code>Array( [2] =&gt; Foo( [bar] =&gt; c ) )</code><br>
4️⃣ <code>Object of class Foo could not be converted to string</code></p>
<p>I’ll give you some moments to think it over…</p>
<hr>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
			<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/S3wsCRJVUyg?rel=0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="More moments later…"></iframe>
		</div>

<hr>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
			<iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/u3UtCnXG2io?rel=0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="More moments later…"></iframe>
		</div>

<hr>
<p>“Obviously” [not 🙄] the right answer is option <strong>4</strong> …</p>
<blockquote>
<p>4️⃣ <code>Object of class Foo could not be converted to string</code></p>
</blockquote>
<p>… because for the <a href="https://www.php.net/manual/en/function.array-diff.php"><code>array_diff</code></a> function …</p>
<blockquote>
<p>Two elements are considered equal if and only if <code>(string) $elem1 === (string) $elem2</code>. That is, when the <a href="https://www.php.net/manual/en/language.types.string.php#language.types.string.casting">string representation</a> is the same.</p>
</blockquote>
<p>… and, adding insult to injury, objects <em><strong>don’t</strong> have a default</em> string representation.</p>
<p>😱 🤦‍♂️ x 100</p>
<iframe src="https://giphy.com/embed/wj8VEUZVVEuls6pOw7" width="480" height="480" frameBorder="0" class="giphy-embed" allowFullScreen></iframe>
<hr>
<p>Funnily enough [not at all 😤] implementing the string conversion magic method …</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="k">public</span> <span class="k">function</span> <span class="fm">__toString</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="nv">$this</span><span class="o">-&gt;</span><span class="na">bar</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div><p>… then option <strong>3</strong> becomes the answer …</p>
<blockquote>
<p>3️⃣ <code>Array( [2] =&gt; Foo( [bar] =&gt; c ) )</code></p>
</blockquote>
<p>… because “arrays” in PHP don’t exist and, in reality, are nothig more than key-value maps in disguise, with the index numbers as the keys. 😕</p>
<p>This means you&rsquo;d need to wrap it all around an <a href="https://www.php.net/manual/en/function.array-values.php"><code>array_values</code></a> call to “reset” all the <del>indexes</del> keys of the <del>array</del> map back to zero.</p>
<iframe src="https://giphy.com/embed/zBZk5FD18QhjP35Goa" width="480" height="480" frameBorder="0" class="giphy-embed" allowFullScreen></iframe>
<hr>
<p>Guess I need to make this old article my new bed time reading, to read over and over and over again: <a href="https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/">PHP: a fractal of bad design / fuzzy notepad</a></p>]]></content:encoded>
    </item>
    <item>
      
      <title>✂️ PHP</title>
      <link>https://hugo.ferreira.cc/php/</link>
      
      <pubDate>Wed, 17 Jun 2015 01:05:01 +0000</pubDate>
      <guid>https://hugo.ferreira.cc/php/</guid>
      <description>Small information nuggets and recipies about PHP</description>

      
      
      <content:encoded><![CDATA[<p><em>(most recent on top)</em></p>
<h2 id="which-url-requested-this-file">Which url requested this file?</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="k">echo</span> <span class="nv">$_SERVER</span><span class="p">[</span><span class="s2">&#34;HTTP_HOST&#34;</span><span class="p">]</span> <span class="o">.</span> <span class="nv">$_SERVER</span><span class="p">[</span><span class="s2">&#34;REQUEST_URI&#34;</span><span class="p">];</span>
</span></span></code></pre></div><h2 id="command-line-scripts">Command line scripts</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">php</span> <span class="o">-</span><span class="nx">r</span> <span class="s1">&#39;$var = value&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nx">php</span> <span class="o">-</span><span class="nx">a</span>                            <span class="c1"># interactive (needs readline)
</span></span></span></code></pre></div><h2 id="show-all-defined-constants">Show all defined constants</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">print_r</span><span class="p">(</span><span class="o">@</span><span class="nx">get_defined_constants</span><span class="p">());</span>
</span></span></code></pre></div><h2 id="default-values-for-contents">Default values for contents</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">defined</span><span class="p">(</span><span class="s1">&#39;CONSTANT&#39;</span><span class="p">)</span><span class="o">?</span> <span class="o">:</span> <span class="nx">define</span><span class="p">(</span><span class="s1">&#39;CONSTANT&#39;</span><span class="p">,</span> <span class="s1">&#39;value&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">defined</span><span class="p">(</span><span class="s1">&#39;CONSTANT&#39;</span><span class="p">)</span> <span class="o">||</span> <span class="nx">define</span><span class="p">(</span><span class="s1">&#39;CONSTANT&#39;</span><span class="p">,</span> <span class="s1">&#39;value&#39;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="nx">defined</span><span class="p">(</span><span class="s1">&#39;CONSTANT&#39;</span><span class="p">)</span> <span class="k">or</span> <span class="nx">define</span><span class="p">(</span><span class="s1">&#39;CONSTANT&#39;</span><span class="p">,</span> <span class="s1">&#39;value&#39;</span><span class="p">);</span>
</span></span></code></pre></div><h2 id="default-values-for-variables">Default values for variables</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-php" data-lang="php"><span class="line"><span class="cl"><span class="nx">isset</span><span class="p">(</span><span class="nv">$var</span><span class="p">)</span><span class="o">?</span> <span class="o">:</span> <span class="nv">$var</span> <span class="o">=</span> <span class="s1">&#39;value&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nx">isset</span><span class="p">(</span><span class="nv">$var</span><span class="p">)</span> <span class="o">||</span> <span class="nv">$var</span> <span class="o">=</span> <span class="s1">&#39;value&#39;</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="nx">isset</span><span class="p">(</span><span class="nv">$var</span><span class="p">)</span> <span class="k">or</span> <span class="nv">$var</span> <span class="o">=</span> <span class="s1">&#39;value&#39;</span><span class="p">;</span>
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      
      <title>🔗 PHP: The Right Way</title>
      <link>https://hugo.ferreira.cc/php-the-right-way/</link>
      
      <pubDate>Tue, 08 Jan 2013 07:07:28 +0000</pubDate>
      <guid>https://hugo.ferreira.cc/php-the-right-way/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://www.phptherightway.com/&#34;&gt;PHP: The Right Way&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;There&amp;rsquo;s a lot of outdated information on the Web that leads new PHP
users astray, propagating bad practices and bad code. This must stop.
&lt;em&gt;PHP: The Right Way&lt;/em&gt; is an easy-to-read, quick reference for PHP best
practices, accepted coding standards, and links to authoritative
tutorials around the Web.&lt;/p&gt;
&lt;/blockquote&gt;</description>

      
      
      <content:encoded><![CDATA[<p><a href="http://www.phptherightway.com/">PHP: The Right Way</a></p>
<blockquote>
<p>There&rsquo;s a lot of outdated information on the Web that leads new PHP
users astray, propagating bad practices and bad code. This must stop.
<em>PHP: The Right Way</em> is an easy-to-read, quick reference for PHP best
practices, accepted coding standards, and links to authoritative
tutorials around the Web.</p>
</blockquote>
]]></content:encoded>
    </item>
  </channel>
</rss>
