2017-05-30 40 views
0

如何在函数调用时能够定义能够定义的部分的函数?php函数在调用时具有可定义的功能

<?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(); 
    } 
} 
?> 

这样的话,说我想从数据库中提取数据,我可以改变defineMe()相匹配的信息的布局,其吐出。我如何覆盖这个函数,仍然可以访问doSomething()函数中的数据?

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

那你找defineMe()做的正是...只是呼应了“名”返回从你的数据库查询? – MinistryofChaps

+0

不,div样式布局,有多个列值 – moatist

回答

3

你可以只传递一个回调到您的函数:

<?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

您也可以在函数定义('doSomething(Callable $ callback)')中声明一个可调用类型,而不是执行'is_callable'检查。 (使用PHP 7) –

+0

由于这个原因,故意留下它,并不是每个人都使用PHP7。但值得注意的是,如果OP(或其他人来)使用PHP7。谢谢! – ccKep

+1

显然,'callable'类型提示可用于PHP 5.4([Link](http://php.net/manual/en/functions.arguments.php#functions.arguments.type- declare)),编辑答案简单地使用它。 – ccKep

相关问题