루프를 반환 할 수 있습니까? 결과가 아니라 루프 자체. PHP에서 함수를 만들고 싶습니다. 예를 들면 다음과 같습니다.함수에서 루프 반환
function myloop($sql){
$query = mysql_query($sql);
return while(mysql_fetch_assoc($query))
}
내가 이것을 만들고 싶은 이유는 코드 반복을 피하기 위해서입니다. 누구든지 나를 도울 수 있습니까? 감사합니다 ..
루프를 반환 할 수 있습니까? 결과가 아니라 루프 자체. PHP에서 함수를 만들고 싶습니다. 예를 들면 다음과 같습니다.함수에서 루프 반환
function myloop($sql){
$query = mysql_query($sql);
return while(mysql_fetch_assoc($query))
}
내가 이것을 만들고 싶은 이유는 코드 반복을 피하기 위해서입니다. 누구든지 나를 도울 수 있습니까? 감사합니다 ..
아니요, 불가능합니다. 대신, 이름으로 기능을 전달하는
// The myloop function, with another name.
function query($sql, $rowcallback)
{
$query = mysqli_query($sql); // use mysqli, not mysql
while
(($row = mysql_fetch_assoc($query)) &&
call_user_func($rowcallback, $row));
}
// The code to process a row.
function processRow(array $row)
{
// Use your row here..
var_dump($row);
return true; // You can return false to break processing.
}
//calling:
query($yourSelf, 'processRow');
을 당신은 또한 당신의 PHP 버전에 따라, 익명 함수를 사용할 수 있습니다 : 당신은하지만, 함수에 함수를 전달할 수있다
//calling:
query($yourSelf,
function(array $row)
{
var_dump($row);
return true; // You can return false to break processing.
});
기능 호출 수신자로부터 호출되는 호출은 종종 콜백이라고합니다. call_user_func은 콜백을 호출하는 가장 좋은 방법이기 때문에 함수뿐만 아니라 메서드와 정적 메서드도 받아 들일 수 있으므로 더 유연하게 사용할 수 있습니다.
아니요, 아닙니다.
a function을 반환하면 아무 것도 실행하지 않고 루프를 실행할 수 있지만 루프 자체는 반환 할 수 없습니다.
번호
당신은, 예를 들어, 루프를 포함 할 수있는 익명 함수를 반환 할 수 있지만, 당신은 단지 기능이 아닌 언어 구조에서 값을 반환 할 수 있습니다.
아니요.하지만 오늘부터 안정 버전으로 PHP를 Iterator
으로 시뮬레이션 할 수 있습니다. PHP 5.5에서는 발전기가 가까이에 있습니다.
$lazyQuery = new SqlResultItertor($sql);
foreach ($lazyQuery as $assoc) {
$assoc; # the result, one per row
}
은 BTW : PDO
및 MySqli
제공이 이미 상자 중 (안 게으른 쿼리,하지만 결과에 이동입니다), mysql을 위해 당신은 반복자-결과가 자신의 객체를 작성해야합니다.
mysql_*
기능 관련 코드는 this answer을 참조하십시오. 그러나 오늘날의 일반적인 제안은 PDO 나 mysqli를 대신 사용하는 것입니다. How to successfully rewrite old mysql-php code with deprecated mysql_* functions?
을 참조하십시오.
대신 루프를 반환하는 당신이 그것을 Variable functions를 사용하여이 방법으로 할 수 : 사시와
function myloop($sql, $myFunction){
$query = mysql_query($sql);
while(mysql_fetch_assoc($query)) {
$myFunction($result);
}
}
function doSomethingWithTheResult($result) {
echo $result; // just to have something here...
}
//now the usage:
myloop("SELECT 1", 'doSomethingWithTheResult');
을, 이것은 Template method OOP 디자인 패턴의 개념과 유사하다.
아니,하지만 당신은 그러나
function loopdate($sql,$code)
{
$query=mysql_query($sql)
while (mysql_fetch_assoc($query))
{
eval($code);
}
}
을 할 수 - 평가는 정말 정말 실망 rediculously 위험합니다.
function loopdate($sql,$function)
{
$query=mysql_query($sql)
while ($data=mysql_fetch_assoc($query))
{
$function($data);
}
}
이 더 좋을 것입니다.PHP는 것이 가능 5.5 이상에서
myfunc($data)
{
foreach ($data as $key->$value)
{
print "<tr><td>".$key."<td><td>".$value."</td></tr>\n";
}
}
그래서 당신은 (이것은 generator라고합니다) return
대신 yield
키워드를 사용하여,
loopdate("select * from mytable","myfunc");
를 호출 할 수
function myloop($sql) {
$query = mysql_query($sql);
while (($row = mysql_fetch_assoc($query))) {
yield $row;
}
}
foreach (myloop('SELECT * FROM foo') as $row) {
// do something with $row
}
이가 구형 PHP에서 반복자로 할 수 있었던 것과 많이 다르지 않지만 코드는 훨씬 깔끔하다.
왜 downvotes? 좋습니다. 질문은 최고의 품질은 아니지만 좋은 의도가 있습니다. 코드 중복을 줄입니다. 그 아이디어는 좋지 않았지만이 질문은 많은 사람들에게도 발생할 수 있다고 생각합니다. 그리고 그것에 대한 좋은 대답을 제공하는 것은 미래에 유익 할 수 있습니다. – ppeterka
@ppeterka 동의 – GolezTrol
@GolezTrol 우리는 우리의 마음에 같은 것을 보았습니다. :) – ppeterka