<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/class.closure.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'fr',
  ),
  'this' => 
  array (
    0 => 'closure.bindto.php',
    1 => 'Closure::bindTo',
    2 => 'Duplique la fermeture avec un nouvel objet li&eacute; et un nouveau contexte de classe.',
  ),
  'up' => 
  array (
    0 => 'class.closure.php',
    1 => 'Closure',
  ),
  'prev' => 
  array (
    0 => 'closure.bind.php',
    1 => 'Closure::bind',
  ),
  'next' => 
  array (
    0 => 'closure.call.php',
    1 => 'Closure::call',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'fr',
    'path' => 'language/predefined/closure/bindto.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="closure.bindto" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">Closure::bindTo</h1>
  <p class="verinfo">(PHP 5 &gt;= 5.4.0, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">Closure::bindTo</span> &mdash; <span class="dc-title">
   Duplique la fermeture avec un nouvel objet lié et un nouveau contexte de classe.
  </span></p>

 </div>

 <div class="refsect1 description" id="refsect1-closure.bindto-description">
  <h3 class="title">Description</h3>
  <div class="methodsynopsis dc-description">
   <span class="modifier">public</span> <span class="methodname"><strong>Closure::bindTo</strong></span>(<span class="methodparam"><span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="language.types.object.php" class="type object">object</a></span></span> <code class="parameter">$newThis</code></span>, <span class="methodparam"><span class="type"><span class="type"><a href="language.types.object.php" class="type object">object</a></span>|<span class="type"><a href="language.types.string.php" class="type string">string</a></span>|<span class="type"><a href="language.types.null.php" class="type null">null</a></span></span> <code class="parameter">$newScope</code><span class="initializer"> = &quot;static&quot;</span></span>): <span class="type"><span class="type"><a href="language.types.null.php" class="type null">?</a></span><span class="type"><a href="class.closure.php" class="type Closure">Closure</a></span></span></div>

  <p class="para rdfs-comment">
   Crée et retourne une nouvelle <a href="functions.anonymous.php" class="link">fonction anonyme
   </a> avec le même corps et les mêmes variables liées que l&#039;originale, mais avec un objet lié
   qui peut être différent, et un nouveau contexte de classe.
  </p>

  <p class="para">
   L&#039;objet lié détermine la valeur que <code class="literal">$this</code> aura dans le corps de la fonction,
   et le contexte de classe représente une classe qui détermine à quels membres privés et protégés
   la fonction anonyme aura accès. Autrement dit, les propriétés qui seront visibles seront les
   mêmes que si la fonction anonyme était une méthode de la classe passée via le paramètre
   <code class="parameter">newScope</code>.
  </p>

  <p class="para">
   Les fermetures statiques ne peuvent pas avoir d&#039;objet lié (la valeur du paramètre
   <code class="parameter">newThis</code> devrait être <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong>), mais cette méthode peut
   néanmoins être utilisée pour changer leur portée de classe.
  </p>

  <p class="para">
   Cette méthode va vérifier qu&#039;une fermeture non-statique à laquelle on passe
   un contexte d&#039;objet deviendra liée à cet objet (et ne sera donc plus non-statique),
   et vice-versa. Dans ce but, les fermetures non-statiques auxquelles on passe un
   contexte de classe mais <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> comme contexte objet seront rendues statiques, et
   inversement.
  </p>

  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Pour simplement dupliquer la fonction anonyme, il est possible d&#039;utiliser
    <a href="language.oop5.cloning.php" class="link">le clonage</a> à la place.
   </p>
  </p></blockquote>

 </div>


 <div class="refsect1 parameters" id="refsect1-closure.bindto-parameters">
  <h3 class="title">Liste de paramètres</h3>
  <dl>
   
    <dt><code class="parameter">newThis</code></dt>
    <dd>
     <p class="para">
      L&#039;objet auquel lier la fonction anonyme, ou <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> pour une fermeture statique.
     </p>
    </dd>
   
   
    <dt><code class="parameter">newScope</code></dt>
    <dd>
     <p class="para">
      Le contexte de classe à associer à la fermeture, ou &#039;static&#039; pour conserver le
      contexte actuel. Si un objet est passé, son type sera utilisé.
      Ceci détermine la visibilité des méthodes protégées et privées de l&#039;objet lié.
      Il n&#039;est pas autorisé de passer (un objet d&#039;) une classe interne pour 
      ce paramètre.
     </p>
    </dd>
   
  </dl>
 </div>


 <div class="refsect1 returnvalues" id="refsect1-closure.bindto-returnvalues">
  <h3 class="title">Valeurs de retour</h3>
  <p class="para">
   Retourne la nouvelle fermeture sous la forme d&#039;un objet <span class="classname"><a href="class.closure.php" class="classname">Closure</a></span>,
   ou <strong><code><a href="reserved.constants.php#constant.null">null</a></code></strong> en cas d&#039;erreur.
  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-closure.bindto-examples">
  <h3 class="title">Exemples</h3>
  <div class="example" id="example-1">
   <p><strong>Exemple #1 Exemple <span class="function"><strong>Closure::bindTo()</strong></span></strong></p>
   <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /><br /></span><span style="color: #007700">class </span><span style="color: #0000BB">A<br /></span><span style="color: #007700">{<br />    private </span><span style="color: #0000BB">$val</span><span style="color: #007700">;<br /><br />    public function </span><span style="color: #0000BB">__construct</span><span style="color: #007700">(</span><span style="color: #0000BB">$val</span><span style="color: #007700">)<br />    {<br />        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">val </span><span style="color: #007700">= </span><span style="color: #0000BB">$val</span><span style="color: #007700">;<br />    }<br /><br />    public function </span><span style="color: #0000BB">getClosure</span><span style="color: #007700">()<br />    {<br />        </span><span style="color: #FF8000">// Retourne une fermeture liée à cet objet et ce contexte<br />        </span><span style="color: #007700">return function() {<br />            return </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">val</span><span style="color: #007700">;<br />        };<br />    }<br />}<br /><br /></span><span style="color: #0000BB">$ob1 </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">(</span><span style="color: #0000BB">1</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$ob2 </span><span style="color: #007700">= new </span><span style="color: #0000BB">A</span><span style="color: #007700">(</span><span style="color: #0000BB">2</span><span style="color: #007700">);<br /><br /></span><span style="color: #0000BB">$cl </span><span style="color: #007700">= </span><span style="color: #0000BB">$ob1</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getClosure</span><span style="color: #007700">();<br />echo </span><span style="color: #0000BB">$cl</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$cl </span><span style="color: #007700">= </span><span style="color: #0000BB">$cl</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bindTo</span><span style="color: #007700">(</span><span style="color: #0000BB">$ob2</span><span style="color: #007700">);<br />echo </span><span style="color: #0000BB">$cl</span><span style="color: #007700">(), </span><span style="color: #DD0000">"\n"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
   </div>

   <div class="example-contents"><p>Résultat de l&#039;exemple ci-dessus est similaire à :</p></div>
   <div class="example-contents screen">
<div class="examplescode"><pre class="examplescode">1
2</pre>
</div>
   </div>
  </div>
 </div>



 <div class="refsect1 seealso" id="refsect1-closure.bindto-seealso">
  <h3 class="title">Voir aussi</h3>
  <ul class="simplelist">
   <li><a href="functions.anonymous.php" class="link">Fonctions anonymes</a></li>
   <li><span class="methodname"><a href="closure.bind.php" class="methodname" rel="rdfs-seeAlso">Closure::bind()</a> - Duplique une fermeture avec un nouvel objet li&eacute; et un nouveau contexte de classe.</span></li>
  </ul>
 </div>


</div><?php manual_footer($setup); ?>