Yani bir konunun biraz çalıştırmak. Ben bir çözüm biliyorum ama çok temiz görünmüyor ve daha iyi bir tane var merak ediyorum.
Ben hazır deyimleri çalıştırmak için bir MySQLi sarıcı yazıyorum. Bir sarıcı ve yeniden içindir gibi (dynamic) sütun tutar iade sorgu bağlıdır ve statik değildir.
Ben buldum ve görünüyor ettik bu bir çözüm, herkesin kullandığı ne olduğunu call_user_func_array.
Bu çalışır, ama onunla benim sorun bana ben gerçekten ilk etapta gerekmez referanslar ekstra bir dizi oluştururken olmasıdır.
Örneğin:
<?php
// Connect, prepare statement, etc.
$stmt->execute();
$fields = $stmt->result_metadata();
$fields = $fields->fetch_fields();
foreach ($fields as $field) {
// Unnecessary creation of an array.
$params[] = &$row[$field->name];
}
call_user_func_array(array($stmt, 'bind_result'), $params);
?>
Yani şimdi ben sadece yöntem tanımının bağlı değildir, çünkü call_user_func_array referans parametreleri geçirmek almak için başka bir dizi oluşturma.
call_user_func_array yöntemi / fonksiyon tanımları uymak için almak için bazı yolu var mı? Parametre bir değişken sayısı ile bir yöntem / işlevi çağırmadan bir temizleyici bir yolu var mı? Ya da, sadece genel bir temizleyici ve bu soruna daha iyi bir çözüm hep birlikte var?
Bağlı parametrelerini değiştirmek için güçlü olmak ve sağlam bildirimini yeniden özelliğini tutmaya çalışırken bind_param çağırırken ben de benzer sorunlar çalıştırmak.
Biraz bir yan sorunu üzerine, tam olarak yapıyor aşağıdaki kodu nedir.
$row[$field->name] = &$row[$field->name];
Bu tuhaf çalışır ve ben tam bir değişken kendisini başvuru nasıl alamadım rağmen, herhangi bir hata üretmez. O ve ben başka bir dizi oluşturma değilim aslında daha eski aralarında herhangi bir büyük fark var mı? Daha mı iyi?
Teşekkürler.
EDIT:
Bu benim Reflection API yerine call_user_fun_array kullanılır nasıl. O benim kullanımına herhangi bir giriş, vb performans vs call_user_func_array, uygulama, büyük mutluluk duyacağız. Ben bu yüzden bunları kullanmak için doğru yolu gerçekten emin değilim gerçekten önce onunla berbat değil ve hemen her yöntemi belgelenmemiş.
<?php
foreach ($fields as $field) {
$row[$field->name] = NULL;
}
$refMethod = new ReflectionMethod($stmt, 'bind_result');
$refMethod->invokeArgs($stmt, $row);
?>