Başka bir işleve bütün argümanları geçmek

2 Cevap php

Bu gibi iki işlevi vardır:

function mysql_safe_query($format) {
	$args = array_slice(func_get_args(),1);
	$args = array_map('mysql_safe_string',$args);
	$query = vsprintf($format,$args);
	$result = mysql_query($query);
	if($result === false) echo '<div class="mysql-error">',mysql_error(),'<br/>',$query,'</div>';
	return $result;
}

function mysql_row_exists() {
	$result = mysql_safe_query(func_get_args());
	return mysql_num_rows($result) > 0;
}

Sorun onlara farklı parametre bekler zaman, bir dizi olarak birinciye args geçirmeden çünkü ikinci işlevi çalışmaz olmasıdır. Tercihen değiştirmeden, bu aşmanın herhangi bir yolu var mı mysql_safe_query?

2 Cevap

Nasıl kullanma hakkında:

$args = func_get_args();
call_user_func_array('mysql_safe_query', $args);

Duruma bağlı olarak, şu da sizin için işe yarayabilecek ve biraz daha hızlı olabilir.

function  mysql_safe_query($format) {
    $args = func_get_args();
    $args = is_array($args[0]) ? $args[0] : $args; // remove extra container, if needed
    // ...

Şimdi çağrı her iki tip için izin verir, ama her iki şekilde çözdükten olurdu çünkü first value, gerçek bir array olması gerekiyordu eğer sorunlu olabilir ki.

Bu ek kök dizinin uzunluğu kontrol edebilir, bu yüzden diğer unsurlar vardır if çözdükten olmayabilir, ama söz: Gerçekten değil ki, genel olarak "temiz", ama yararlı ve hızlı :-) olabilir