<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.operator.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'pt_BR',
  ),
  'this' => 
  array (
    0 => 'operator.overloading.php',
    1 => 'M&eacute;todos M&aacute;gicos de Sobrecarga de Operadores',
    2 => 'M&eacute;todos M&aacute;gicos de Sobrecarga de Operadores',
  ),
  'up' => 
  array (
    0 => 'book.operator.php',
    1 => 'Sobrecarga de Operadores',
  ),
  'prev' => 
  array (
    0 => 'operator.installation.php',
    1 => 'Instala&ccedil;&atilde;o',
  ),
  'next' => 
  array (
    0 => 'book.outcontrol.php',
    1 => 'Controle de Sa&iacute;da',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'pt_BR',
    'path' => 'reference/operator/overloading.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="operator.overloading" class="chapter">
 <h1 class="title">Métodos Mágicos de Sobrecarga de Operadores</h1>

 <p class="simpara">
  The operator overloading extension allows you to define how an object reacts to operators. This is done by implementing the following magic methods:
 </p>
 <p class="para">
  Operadores aritméticos:
  <ul class="simplelist">
   <li><code class="literal">$a::__add($b)</code></li>
   <li><code class="literal">$a::__sub($b)</code></li>
   <li><code class="literal">$a::__mul($b)</code></li>
   <li><code class="literal">$a::__div($b)</code></li>
   <li><code class="literal">$a::__mod($b)</code></li>
   <li><code class="literal">$a::__pow($b)</code></li>
  </ul>
 </p>
 <p class="para">
  Operadores de atribuição:
  <ul class="simplelist">
   <li><code class="literal">$a::__assign($b)</code></li>
   <li><code class="literal">$a::__assign_add($b)</code></li>
   <li><code class="literal">$a::__assign_sub($b)</code></li>
   <li><code class="literal">$a::__assign_mul($b)</code></li>
   <li><code class="literal">$a::__assign_div($b)</code></li>
   <li><code class="literal">$a::__assign_mod($b)</code></li>
   <li><code class="literal">$a::__assign_pow($b)</code></li>
   <li><code class="literal">$a::__assign_bw_and($b)</code></li>
   <li><code class="literal">$a::__assign_bw_or($b)</code></li>
   <li><code class="literal">$a::__assign_bw_xor($b)</code></li>
   <li><code class="literal">$a::__assign_sl($b)</code></li>
   <li><code class="literal">$a::__assign_sr($b)</code></li>
   <li><code class="literal">$a::__assign_concat($b)</code></li>
  </ul>
 </p>
 <p class="para">
  Operadores binários:
  <ul class="simplelist">
   <li><code class="literal">$a::__bw_and($b)</code></li>
   <li><code class="literal">$a::__bw_or($b)</code></li>
   <li><code class="literal">$a::__bw_xor($b)</code></li>
   <li><code class="literal">$a::__bw_not()</code></li>
   <li><code class="literal">$a::__sl($b)</code></li>
   <li><code class="literal">$a::__sr($b)</code></li>
  </ul>
 </p>
 <p class="para">
  Operadores de comparação:
  <ul class="simplelist">
   <li><code class="literal">$a::__is_equal($b)</code></li>
   <li><code class="literal">$a::__is_not_equal($b)</code></li>
   <li><code class="literal">$a::__is_identical($b)</code></li>
   <li><code class="literal">$a::__is_not_identical($b)</code></li>
   <li><code class="literal">$a::__is_smaller($b)</code></li>
   <li><code class="literal">$a::__is_smaller_or_equal($b)</code></li>
   <li><code class="literal">$a::__is_greater($b)</code></li>
   <li><code class="literal">$a::__is_greater_or_equal($b)</code></li>
   <li><code class="literal">$a::__spaceship($b)</code></li>
  </ul>
 </p>
 <p class="para">
  Operadores de incremento e decremento:
  <ul class="simplelist">
   <li><code class="literal">$a::__pre_inc()</code></li>
   <li><code class="literal">$a::__post_inc()</code></li>
   <li><code class="literal">$a::__pre_dec()</code></li>
   <li><code class="literal">$a::__post_dec()</code></li>
  </ul>
 </p>
 <p class="para">
  Operadores de string:
  <ul class="simplelist">
   <li><code class="literal">$a::__concat($b)</code></li>
  </ul>
 </p>
 <div class="section">
  <h2 class="title">Exemplos de Sobrecarga de Operadores</h2>
  <p class="simpara">
   O exemplo a seguir é a classe usada nos testes da extensão de sobrecarga de operadores.
   Ela sobrecarrega todos os operadores que podem ser sobrecarregados.
  </p>
  <div class="example" id="operator.overloading.complete-class">
   <p><strong>Exemplo #1 Classe completa para sobrecarga de operadores</strong></p>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">class </span><span style="color: #0000BB">OperatorOverloading </span><span style="color: #007700">{
    protected </span><span style="color: #0000BB">mixed $value</span><span style="color: #007700">;

    </span><span style="color: #FF8000">// Região de métodos mágicos padrão
    </span><span style="color: #007700">public function </span><span style="color: #0000BB">__get</span><span style="color: #007700">(</span><span style="color: #0000BB">string $name</span><span style="color: #007700">)
    {
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__set</span><span style="color: #007700">(</span><span style="color: #0000BB">string $name</span><span style="color: #007700">, </span><span style="color: #0000BB">mixed $value</span><span style="color: #007700">)
    {
        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">= </span><span style="color: #0000BB">$value</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $init </span><span style="color: #007700">= </span><span style="color: #0000BB">null</span><span style="color: #007700">)
    {
        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">= </span><span style="color: #0000BB">$init</span><span style="color: #007700">;
    }
    </span><span style="color: #FF8000">// fim da região

    // região dos operadores artiméticos
    </span><span style="color: #007700">public function </span><span style="color: #0000BB">__add</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int</span><span style="color: #007700">|</span><span style="color: #0000BB">float
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">+ </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__div</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int</span><span style="color: #007700">|</span><span style="color: #0000BB">float
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">/ </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__mod</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">% </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__mul</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int</span><span style="color: #007700">|</span><span style="color: #0000BB">float
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">* </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__pow</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int</span><span style="color: #007700">|</span><span style="color: #0000BB">float
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">** </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__sub</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int</span><span style="color: #007700">|</span><span style="color: #0000BB">float
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">- </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }
    </span><span style="color: #FF8000">// fim da região

    // região dos operadores de atribuição
    </span><span style="color: #007700">public function </span><span style="color: #0000BB">__assign</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_add</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">+= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_bw_and</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&amp;= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_bw_or</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">|= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_concat</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">string
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">.= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_div</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">/= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_mod</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">%= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_mul</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">*= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_pow</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">**= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_sl</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&lt;&lt;= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_sr</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&gt;&gt;= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__assign_sub</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">-= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }
    </span><span style="color: #FF8000">//fim da região

    // região dos operadores binários
    </span><span style="color: #007700">public function </span><span style="color: #0000BB">__bw_and</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&amp; </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__bw_not</span><span style="color: #007700">(): </span><span style="color: #0000BB">int</span><span style="color: #007700">|</span><span style="color: #0000BB">string
    </span><span style="color: #007700">{
        return ~</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__bw_or</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">| </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__bw_xor</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">^ </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__sl</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&lt;&lt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__sr</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&gt;&gt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }
    </span><span style="color: #FF8000">// fim da região

    // região dos operadores de comparação
    </span><span style="color: #007700">public function </span><span style="color: #0000BB">__is_equal</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">== </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__is_greater</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&gt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__is_greater_or_equal</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&gt;= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__is_identical</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">=== </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__is_not_equal</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">!= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__is_not_identical</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">!== </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__is_smaller</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&lt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__is_smaller_or_equal</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">bool
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&lt;= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__spaceship</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">int
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">&lt;=&gt; </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }
    </span><span style="color: #FF8000">// fim da região

    // região dos operadores de incremento/decremento
    </span><span style="color: #007700">public function </span><span style="color: #0000BB">__post_dec</span><span style="color: #007700">(): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">--;
    }

    public function </span><span style="color: #0000BB">__post_inc</span><span style="color: #007700">(): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">++;
    }

    public function </span><span style="color: #0000BB">__pre_dec</span><span style="color: #007700">(): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return --</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">;
    }

    public function </span><span style="color: #0000BB">__pre_inc</span><span style="color: #007700">(): </span><span style="color: #0000BB">mixed
    </span><span style="color: #007700">{
        return ++</span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value</span><span style="color: #007700">;
    }
    </span><span style="color: #FF8000">// fim da região

    // região dos operadores de string
    </span><span style="color: #007700">public function </span><span style="color: #0000BB">__concat</span><span style="color: #007700">(</span><span style="color: #0000BB">mixed $val</span><span style="color: #007700">): </span><span style="color: #0000BB">string
    </span><span style="color: #007700">{
        return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">value </span><span style="color: #007700">. </span><span style="color: #0000BB">$val</span><span style="color: #007700">;
    }
    </span><span style="color: #FF8000">// fim da região

</span><span style="color: #007700">}</span></code></pre></div>
   </div>

   <div class="example-contents"><p>
    Usando a classe acima pode-se sobrecarregar os operadores da seguinte forma:
   </p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$a </span><span style="color: #007700">= new </span><span style="color: #0000BB">OperatorOverloading</span><span style="color: #007700">(</span><span style="color: #0000BB">5</span><span style="color: #007700">);
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">+ </span><span style="color: #0000BB">10</span><span style="color: #007700">);
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$a </span><span style="color: #007700">- </span><span style="color: #0000BB">10</span><span style="color: #007700">);
</span><span style="color: #0000BB">$b </span><span style="color: #007700">= new </span><span style="color: #0000BB">OperatorOverloading</span><span style="color: #007700">(</span><span style="color: #DD0000">"Olá, "</span><span style="color: #007700">);
</span><span style="color: #0000BB">var_dump</span><span style="color: #007700">(</span><span style="color: #0000BB">$b </span><span style="color: #007700">. </span><span style="color: #DD0000">"Mundo!"</span><span style="color: #007700">);</span></code></pre></div>
   </div>

   <div class="example-contents"><p>
    The above code will output:
   </p></div>
   <div class="example-contents screen">
<div class="cdata"><pre>
int(15)
int(-5)
string(11) &quot;Olá, Mundo!&quot;
</pre></div>
   </div>
  </div>
 </div>
</div>
<?php manual_footer($setup); ?>