2017-05-30 4 views
0
aufgerufen wird

Wie komponiere ich eine Funktion mit einem Abschnitt, der definiert werden kann, wenn die Funktion aufgerufen wird?PHP-Funktion, die eine definierbare Funktion hat, wenn

<?php 
class MyClass { 
     function doSomething() { 
     $conn = $this->connectToDatabase("database"); 
     $rows = $conn->query($query); 

     if ($rows->num_rows > 0) { 
      while($row = $rows->fetch_assoc()) { 
       $col_value = $row['name']; 
       function defineMe() { 
        //i need to be defined when called 
       } 
} 
     } else { 
      echo "0 results"; 
     } 

     $conn->close(); 
    } 
} 
?> 

Auf diese Weise, sage ich ziehen Daten aus einer Datenbank gesucht, ich kann DefineMe() ändern Sie das Layout der Info, dass sein Spucken entsprechen. Wie kann ich diese Funktion überschreiben und trotzdem auf die Daten der Funktion doSomething() zugreifen?

Wie

$myClass = new MyClass; 
$myClass->doSomething(){ 
    function defineMe() { 
     echo $col_value; 
    } 
}; 
+0

Was suchen Sie DefineMe() genau das zu tun ... echo nur den 'name' zurück aus Ihrer Datenbankabfrage? – MinistryofChaps

+0

nein, ein div style-Layout mit mehreren Spaltenwerten – moatist

Antwort

3

Sie können nur einen Rückruf an Ihre Funktion übergeben:

<?php 
class MyClass 
{ 
    function doSomething(callable $callback) 
    { 
     $conn = $this->connectToDatabase("database"); 
     $rows = $conn->query($query); 

     if ($rows->num_rows > 0) 
     { 
      while($row = $rows->fetch_assoc()) 
      { 
       $col_value = $row['name']; 
       $callback($col_value);  // Call callback 
      } 
     } else { 
      echo "0 results"; 
     } 

     $conn->close(); 
    } 
} 

$myClass = new MyClass; 
$myClass->doSomething(function($col_value) { 
    echo "Inside callback: ".$col_value; 
}); 
?> 
+2

Sie können auch einen aufrufbaren Typ in Ihrer Funktionsdefinition deklarieren ('doSomething (Callable $ callback)' ') anstatt die' is_callable'-Prüfung durchzuführen. (Mit PHP 7.) –

+0

Aus diesem Grund hat es absichtlich weggelassen, nicht jeder ist auf PHP7 noch. Aber es ist in der Tat bemerkenswert, falls OP (oder jemand anderes, der vorbeikommt) PHP7 benutzt. Vielen Dank! – ccKep

+1

Offenbar ist der 'called' Typhinweis seit PHP 5.4 ([Link] (http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration)), bearbeitete Antwort verfügbar um das einfach zu benutzen. – ccKep

Verwandte Themen